Avatar billede ihtezaz Praktikant
18. september 2006 - 21:46 Der er 14 kommentarer og
1 løsning

Statistik med COUNT funktionen

Hej

Jeg har brug for at lave statistik over brugers alder i en tabel,  intervallerne på alder er 18-25 og 26-33.

Tabellen skal starte med kolonne hvor intervallerne er angivet, således.

18-25  450

26-33  600

kolonnen der skal bruges til at finde alder, er "foedseldag". hvordan kan det lige løses vha. SQL. Bemærk interval kolonnen er ikke en der findes i db'en, men skal laves vha. sql.
Avatar billede arne_v Ekspert
18. september 2006 - 21:52 #1
en stor grim CASE WHEN ?
Avatar billede ihtezaz Praktikant
18. september 2006 - 21:56 #2
mm.. jo, hvis du havde et eksempel, så skal det laves som en stored procedure
Avatar billede ihtezaz Praktikant
18. september 2006 - 21:56 #3
Kunne man f.eks. lave det, så det ikke var en stored procedure ?
Avatar billede arne_v Ekspert
18. september 2006 - 22:00 #4
det kan laves i en enkelt SELECT

den kan udfoeres i en SP eller udenfor alt efter dine behov
Avatar billede ihtezaz Praktikant
18. september 2006 - 22:01 #5
Meget gerne en eksempel, kan slet ikke overskue det, sql er ikke min stærk side. Helst udenfor sp.
Avatar billede arne_v Ekspert
18. september 2006 - 22:02 #6
foerst den simple med UNION:

(SELECT '18-25', COUNT(*) FROM tabel WHERE alder BETWEEN 18 AND 25)
UNION
(SELECT '26-33', COUNT(*) FROM tabel WHERE alder BETWEEN 26 AND 33)
UNION
...
Avatar billede ihtezaz Praktikant
18. september 2006 - 22:05 #7
Sorry, jeg glemte vist at sige, at brugerens alder står ikke direkte i tabellen, men som Fødselsdag, sådan: 11-05-1980
Avatar billede arne_v Ekspert
18. september 2006 - 22:05 #8
saa en CASE WHEN

SELECT grp,COUNT(*) FROM
(SELECT CASE WHEN alder BETWEEN 18 and 25 THEN '18-25' WHEN alder BETWEEN 26 AND 33 THEN '26-33' ... END AS grp FROM tabel) tmp
GROUP BY grp
Avatar billede arne_v Ekspert
18. september 2006 - 22:08 #9
det skrev du faktisk

sorry

der skal lidt mere paa saa

men det kan godt goeres

jeg kan poste en loesning om nogle timer
Avatar billede ihtezaz Praktikant
18. september 2006 - 22:30 #10
Det er bare fint :)
Avatar billede arne_v Ekspert
19. september 2006 - 05:16 #11
erstat age med

YEAR(GETDATE())-YEAR(birthday)-CASE WHEN DATEPART(dy,GETDATE())<DATEPART(dy,birthday) THEN 1 ELSE 0 END
Avatar billede ihtezaz Praktikant
19. september 2006 - 10:07 #12
Ok, således ?


SELECT grp,COUNT(*) FROM
(SELECT CASE WHEN YEAR(GETDATE())-YEAR(birthday)-CASE WHEN DATEPART(dy,GETDATE())<DATEPART(dy,birthday) THEN 1 ELSE 0 END BETWEEN 18 and 25 THEN '18-25' WHEN YEAR(GETDATE())-YEAR(birthday)-CASE WHEN DATEPART(dy,GETDATE())<DATEPART(dy,birthday) THEN 1 ELSE 0 END BETWEEN 26 AND 33 THEN '26-33' ... END AS grp FROM tabel) tmp
GROUP BY grp
Avatar billede arne_v Ekspert
20. september 2006 - 01:32 #13
ser rigtigt

jeg har ikke testet søslangen dog

NB: husk at erstatte ... med det rigtige
Avatar billede ihtezaz Praktikant
24. september 2006 - 22:21 #14
Takker, smid et svar.
Avatar billede arne_v Ekspert
25. september 2006 - 00:48 #15
kommer her
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