web-dev-qa-db-ja.com

ヒストグラムのSQL Serverテーブルから範囲ビンを作成する

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

この問題にどのように取り組むべきですか?

19
user10901

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
32
Lamak

上記の例では、値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
1
lonniect