J'ai le tableau suivant dans SQL Server:
-----------------------------
ID Age Gender
1 30 F
2 35 M
3 32 M
4 18 F
5 21 F
Ce que je dois faire est d'exécuter une requête qui regroupera les enregistrements dans des plages données et comptera les occurrences. Les résultats doivent être affichés ultérieurement dans un histogramme (graphique à barres). J'ai essayé une requête similaire à la suivante:
SELECT
count(CASE WHEN Age>= 10 AND Age < 20 THEN 1 END) AS '10 - 20',
count(CASE WHEN Age>= 21 AND Age < 30 THEN 1 END) AS '21 - 30',
count(CASE WHEN Age>= 31 AND Age < 35 THEN 1 END) AS '31 - 35',
count(CASE WHEN Age>= 36 AND Age < 40 THEN 1 END) AS '36 - 40',
FROM (SELECT Age FROM Attendees) AS AgeGroups
Pour le moment, cela fait l'affaire, mais ne tient pas compte de la colonne genre. Il en résultera une seule ligne qui compte la fréquence de chaque groupe d'âge:
10-20 21-30 31-35 36-40
0 22 21 13
Si le sexe est pris en compte, il devrait y avoir deux enregistrements pour chaque sexe. J'ai besoin de voir quelque chose comme:
Gender 10-20 21-30 31-35 36-40
M 0 12 9 6
F 0 10 12 7
Comment dois-je aborder ce problème?
Ajoutez simplement la colonne Gender
à votre SELECT
puis effectuez une GROUP BY
.
SELECT
Gender,
count(CASE WHEN Age>= 10 AND Age < 20 THEN 1 END) AS [10 - 20],
count(CASE WHEN Age>= 21 AND Age < 30 THEN 1 END) AS [21 - 30],
count(CASE WHEN Age>= 31 AND Age < 35 THEN 1 END) AS [31 - 35],
count(CASE WHEN Age>= 36 AND Age < 40 THEN 1 END) AS [36 - 40]
FROM Attendees AS AgeGroups
GROUP BY Gender
L'exemple ci-dessus exclut les valeurs 20, 30, 35 et 40. Il existe plusieurs façons de dépouiller ce chat, en voici une:
SELECT
Gender,
count(CASE WHEN Age> 9 AND Age <= 20 THEN 1 END) AS [10 - 20],
count(CASE WHEN Age> 20 AND Age <= 30 THEN 1 END) AS [21 - 30],
count(CASE WHEN Age> 30 AND Age <= 35 THEN 1 END) AS [31 - 35],
count(CASE WHEN Age> 35 AND Age <= 40 THEN 1 END) AS [36 - 40]
FROM Attendees AS AgeGroups
GROUP BY Gender