Avatar billede kraghjensen Nybegynder
23. november 2005 - 11:21 Der er 7 kommentarer og
1 løsning

SQL sætning

Jeg har en database med et antal rækker, der indeholder svar på nogle spørgsmål. Hver svar går fra 1 til 11, dvs man i spørgsmål 1(række 1) kan have f.eks. 10 personer som har svaret på følgende måde:
1,2,5,8,6,9,10,11,6,7

Hvordan laver jeg nemmest en sql sætning(er) der kan vise hvordan mange personer har svaret, hvad er gennemsnittet af besvarelsen, og hvor mange har svaret henholdvis 1,2,3,4,5,6,7,8,9,10,11

Resultatet skulle gerne være noget i stil med det her:
Spørgsmål 1:
Antal personer: 10
Gennemsnit:6,5
1 person har svaret:1
1 person har svaret:2
1 person har svaret:5
2 person har svaret:6
1 person har svaret:7
1 person har svaret:9
1 person har svaret:10
1 person har svaret:11

Spørgsmål: 2 osv
Avatar billede fennec Nybegynder
23. november 2005 - 11:33 #1
Du skal lige beskrive din database... Hvilke tabeller er der og hvilke kolonner.
Avatar billede kraghjensen Nybegynder
23. november 2005 - 12:15 #2
Der er en tabel der hedder eval, og i den der er 66 kolonner navngivet fra v_1 til v_66. Men det er ikke sikkert der altid er lige 66 - der kan både være mindre og flere kolonner.
Avatar billede fennec Nybegynder
23. november 2005 - 12:24 #3
Hvordan kan der være mindre/flere kolonner i den samme tabel??? Der kan kun være et bestemt antal kolonner...

Hvad svare v_x til?? Hvilke data??
Avatar billede kraghjensen Nybegynder
23. november 2005 - 13:44 #4
jeg opretter databasen ud fra en excel fil som genereres fra et andet system, som kan genere x antal spørgsmål til en undersøgelse. Derfor kan der være mindre/flere kolonner. Men det er ikke et must - vi kan bare sige at der altid er 66 kolonner.

v_x svarer til svaret fra et given spørgsmål og er af typen tal.

f.eks. i kolonne v_10 gemmes svarene på spørgsmål nr. 10 og svarene kan være en værdi fra 1 til 11.
Avatar billede fennec Nybegynder
23. november 2005 - 14:41 #5
select count(v_1) as antal, v_1 from eval group by v_1
select count(v_2) as antal, v_2 from eval group by v_2
...
Avatar billede fennec Nybegynder
23. november 2005 - 14:43 #6
Antal svar og gennemsnit:

select avg(v_1) as gennemsnit, count(v_1) as antal from eval
select avg(v_2) as gennemsnit, count(v_2) as antal from eval
Avatar billede kraghjensen Nybegynder
23. november 2005 - 16:01 #7
det virker - tak. Men hvordan kan jeg gøre det smart, for nu skal jeg jo lave x antal linier kode som er ens ligesom det her:

sql="select avg(v_1) as gennemsnit, count(v_1) as antal from eval"

set db = conn.execute(sql)
do while not db.EOF
gennemsnit_v1 = db("gennemsnit")
antal_v1 = db("antal")

db.movenext
loop

Og lige et tillægsspørgsmål. Hvis er person svarer 11 må det ikke tælles med, hvordan gør man det.
Du har svaret på det oprindelige spørgsmål, så du har her de 150, men hvis du kan hjælpe med resten vil det være godt.
Avatar billede fennec Nybegynder
23. november 2005 - 16:08 #8
Noget i denne stil:

for f=1 to 66
  sql="select avg(v_"& f &") as gennemsnit, count(v_"& f &") as antal from eval where v_"& f &"<>11"
  set db = conn.execute(sql)
  do while not db.EOF
    gennemsnit_v1 = db("gennemsnit")
    antal_v1 = db("antal")
    db.movenext
  loop
next

.o) <-- One Eyed Jack
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester