从SQL Server表为直方图创建范围箱

use*_*901 19 sql grouping histogram

我在SQL Server中有以下表:

-----------------------------
ID       Age          Gender
1          30           F
2          35           M
3          32           M
4          18           F
5          21           F
Run Code Online (Sandbox Code Playgroud)

我需要做的是执行一个查询,该查询将给定范围内的记录分组并计算出现的次数.结果需要稍后在直方图(条形图)中显示.我尝试了类似以下的查询:

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
Run Code Online (Sandbox Code Playgroud)

目前,这可以解决问题,但不考虑性别列.它将产生一行,计算每个年龄组的频率:

10-20     21-30     31-35     36-40
  0         22        21        13
Run Code Online (Sandbox Code Playgroud)

如果考虑性别,则应为每个性别显示两个记录.我需要看到类似的东西:

Gender    10-20     21-30     31-35     36-40
  M         0         12        9         6
  F         0         10        12        7
Run Code Online (Sandbox Code Playgroud)

我该如何处理这个问题?

Lam*_*mak 33

只需将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
Run Code Online (Sandbox Code Playgroud)

  • 我相信您必须使用sum()函数而不是count()函数。否则,每个范围将等于“与会者”表中的记录总数。(顺便说一句-我多次犯同样的错误。) (2认同)