use*_*053 3 sql sql-server sql-server-2008
我有一个要求,我必须找到不同年龄组的人数,如:
0-5 12
6-10 35
11-15 26
16-20 57
20+ 120
Run Code Online (Sandbox Code Playgroud)
我在SQL Server中创建一个存储过程,它将首先创建一个临时表并存储年龄组,就像一列将有0而另一列将有5等等.然后我将遍历它们并找到最小和最大范围之间的计数,并将计数与mim-max值存储在另一个临时表中.
有没有其他简单和更好的方法来实现此输出.请指教.
也许与SUM和CASE:
SELECT [0-5] = SUM(CASE WHEN AGE >= 0 AND AGE <= 5 THEN 1 ELSE 0 END),
[6-10] = SUM(CASE WHEN AGE > 5 AND AGE <= 10 THEN 1 ELSE 0 END),
[11-15] = SUM(CASE WHEN AGE > 10 AND AGE <= 15 THEN 1 ELSE 0 END),
....
FROM dbo.Persons
Run Code Online (Sandbox Code Playgroud)
或者,使用范围表,您可以使用LEFT OUTER JOIN,GROUP BY+ COUNT:
SELECT r.[From], r.[To], [Count]=COUNT(p.Age)
FROM dbo.Ranges r
LEFT OUTER JOIN dbo.Persons p
ON p.[Age] >= r.[From] AND p.[Age] <= r.[To]
GROUP BY r.[From], r.[To]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2207 次 |
| 最近记录: |