Avatar billede hcthorsen Praktikant
21. november 2009 - 17:10 Der er 19 kommentarer og
1 løsning

Hjælp til søgning

Er der nogen der ved hvordan man modificerer denne søgning så den tæller op hvor mange der er >= 2, >=5, >=15 år:

SELECT alder, COUNT(alder) AS antal FROM erfaring WHERE user = '$_SESSION[user]' AND alder != '' AND funktion = IFNULL($funktion,funktion) GROUP BY alder
21. november 2009 - 17:45 #1
....HAVING antal >= 2 eller >= 5 eller >=15.

For eksempel:

SELECT alder, COUNT(alder) AS antal FROM erfaring WHERE user = '$_SESSION[user]' AND alder != '' AND funktion = IFNULL($funktion,funktion) GROUP BY alder HVING alder >=15
Avatar billede arne_v Ekspert
21. november 2009 - 17:46 #2
prøv:

SELECT CASE WHEN alder < 2 THEN '0-1' CASE 2 <= alder AND alder < 5 THEN  '2-4' CASE 5 <= alder AND alder < 15 THEN '5-14' ELSE '15-' END AS aldersgruppe, COUNT(alder) AS antal
FROM erfaring
WHERE user = '$_SESSION[user]' AND alder != '' AND funktion = IFNULL($funktion,funktion)
GROUP BY CASE WHEN alder < 2 THEN '0-1' CASE 2 <= alder AND alder < 5 THEN  '2-4' CASE 5 <= alder AND alder < 15 THEN '5-14' ELSE '15-' END
21. november 2009 - 18:28 #3
Misforstod jeg spoergsmaalet?  Ja jeg kan godt se det nu.  Se bort fra mit svar.
Avatar billede hcthorsen Praktikant
21. november 2009 - 19:54 #4
arne_v, det virker altså ikke:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE 2 <= alder AND alder < 5 THEN '2-4' CASE 5 <= alder AND alder < 15 THEN '5-' at line 1
Avatar billede arne_v Ekspert
21. november 2009 - 19:57 #5
Ah.

Der skal kun være en CASE resten skal være WHEN.
Avatar billede arne_v Ekspert
21. november 2009 - 19:58 #6
SELECT CASE WHEN alder < 2 THEN '0-1' WHEN 2 <= alder AND alder < 5 THEN  '2-4' WHEN 5 <= alder AND alder < 15 THEN '5-14' ELSE '15-' END AS aldersgruppe, COUNT(alder) AS antal
FROM erfaring
WHERE user = '$_SESSION[user]' AND alder != '' AND funktion = IFNULL($funktion,funktion)
GROUP BY CASE WHEN alder < 2 THEN '0-1' WHEN 2 <= alder AND alder < 5 THEN  '2-4' WHEN 5 <= alder AND alder < 15 THEN '5-14' ELSE '15-' END
Avatar billede hcthorsen Praktikant
21. november 2009 - 22:11 #7
Ja, nu begynder det at ligne noget. Der er bare det problem at jeg faktisk gerne vil tælle op hvor mange der er <= 2, <=5, <=15 år (byttede rundt på > og < i mit oprindelige spørgsmål). Det vil sige at der er gengangere i grupperne. Det kan man vist ikke have med den søgning du har lavet, eller hvad? Har prøvet med nedenstående, og der kommer man eksempelvis ikke med i gruppen <=5  hvis man allerede er kommet i <=2. Nogen ideer til hvordan man kan løse det problem?

SELECT
CASE
WHEN alder <= 2 THEN 2
WHEN alder <= 5 THEN 5
WHEN alder <= 15 THEN 15
END
AS aldersgruppe, COUNT(alder) AS antal
FROM erfaring
GROUP BY
CASE
WHEN alder <= 2 THEN 2
WHEN alder <= 5 THEN 5
WHEN alder <= 15 THEN 15
END
ORDER BY aldersgruppe
Avatar billede arne_v Ekspert
21. november 2009 - 22:17 #8
3 x SELECT med UNION imellem
Avatar billede hcthorsen Praktikant
21. november 2009 - 23:30 #9
Nå, det må jeg kigge på i morgen. Tak for hjælpen indtil nu.
Avatar billede hcthorsen Praktikant
21. november 2009 - 23:42 #10
Nu har jeg prøvet at lave søgningen med UNION. Jeg får det rigtige resultat for aldersgruppen, men jeg får stadig antallet af rækker der ikke passer på min betingelse (fx WHEN alder <= 5 THEN 5), hvis du forstår hvad jeg mener. Du kan se resultatet af en søgning her:

aldersgruppe     antal
NULL               107
2                 6
NULL               103
5               10
NULL               93
15               20

Jeg ville gerne bare have resultatet til at blive:

aldersgruppe     antal
2                 6
5               10
15               20

Nogen ideer?
Avatar billede arne_v Ekspert
22. november 2009 - 00:25 #11
Laver du:

SELECT '<=2' FROM erfaring WHERE alder <= 2
UNION
SELECT '<=5' FROM erfaring WHERE alder <= 5
UNION
SELECT '<=15' FROM erfaring WHERE alder <= 15

?
Avatar billede hcthorsen Praktikant
22. november 2009 - 13:11 #12
Nej, jeg bruger:

SELECT CASE WHEN alder <= 2 THEN 2 END AS aldersgruppe, COUNT(alder) AS antal FROM erfaring GROUP BY CASE WHEN alder <= 2 THEN 2 END UNION SELECT CASE WHEN alder <= 5 THEN 5 END AS aldersgruppe, COUNT(alder) AS antal FROM erfaring GROUP BY CASE WHEN alder <= 5 THEN 5 END UNION SELECT CASE WHEN alder <= 15 THEN 15 END AS aldersgruppe, COUNT(alder) AS antal FROM erfaring GROUP BY CASE WHEN alder <= 15 THEN 15 END

Det du foreslår giver følgende output:

<=2 (navn på kolonne)
<=2
<=5
<=15
Avatar billede arne_v Ekspert
22. november 2009 - 15:34 #13
ups - jeg glemte count

SELECT '<=2',COUNT(*) FROM erfaring WHERE alder <= 2
UNION
SELECT '<=5',COUNT(*) FROM erfaring WHERE alder <= 5
UNION
SELECT '<=15',COUNT(*) FROM erfaring WHERE alder <= 15

?
Avatar billede hcthorsen Praktikant
22. november 2009 - 18:39 #14
Jeg kan ikke komme til at teste det fra den computer jeg sidder ved nu, så jeg må vende tilbage.-)
Avatar billede hcthorsen Praktikant
23. november 2009 - 09:29 #15
Ja, ja. Det spiller. Var det ikke sværere end det:-) Sender du et svar? Tak for hjælpen - igen.
28. november 2009 - 10:04 #16
hcthorsen, hvis "det spiller," saa var tiden maaske inde til at lukke spoergsmaalet.  Det giver god orden at lukke spoergsmaal der ikke laengere er aabne og saa staar det ikke laengere som aabent paa min liste af indlaeg.  Yderligee synes jeg at du skylder at give points (ikke til mig, for jeg havde misforstaaet spoergsmaalet.)
Avatar billede hcthorsen Praktikant
28. november 2009 - 11:06 #17
Øh, ja jeg mangler at afgive point. Derfor har jeg bedt arne_v om at sende et svar. Jeg har ikke lukket spørgsmålet fordi han ikke har sendt et svar endnu. jeg giver ham lige en chance for at melde sig på banen.
Avatar billede hcthorsen Praktikant
30. november 2009 - 20:40 #18
På opfordring lukker jeg hermed spørgsmålet. arne_v, du må henvende dig hvis du vil have dine velfortjente point:-)
Avatar billede arne_v Ekspert
30. november 2009 - 20:50 #19
Jeg har vist misset emailen om at der var oensket svar ....
Avatar billede hcthorsen Praktikant
01. december 2009 - 07:05 #20
Jeg laver et nyt spørgsmål...
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
Computerworld tilbyder specialiserede kurser i database-management

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