SQL Serverに次のテーブルがあります。
-----------------------------
ID Age Gender
1 30 F
2 35 M
3 32 M
4 18 F
5 21 F
私がする必要があるのは、指定された範囲のレコードをグループ化し、発生をカウントするクエリを実行することです。結果は後でヒストグラムチャート(棒グラフ)に表示する必要があります。次のようなクエリを試しました。
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
現時点では、これでうまくいきますが、性別の列は考慮していません。すべての年齢層の頻度をカウントする単一の行が生成されます。
10-20 21-30 31-35 36-40
0 22 21 13
性別を考慮する場合、性別ごとに2つのレコードを表示する必要があります。私は次のようなものを見る必要があります:
Gender 10-20 21-30 31-35 36-40
M 0 12 9 6
F 0 10 12 7
この問題にどのように取り組むべきですか?
Gender
列をSELECT
に追加してから、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
上記の例では、値20、30、35、および40が除外されています。この猫のスキンを作成する方法は複数あります。
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