我有一个要求,我必须找到不同年龄段的人数,例如:
0-5 12 6-10 35 11-15 26 16-20 57 20+ 120
我正在SQL Server中创建一个存储过程,该过程将首先创建一个临时表并存储年龄组,例如一列将为0,另一列将为5,依此类推。然后,我将遍历它们,找到最小和最大范围之间的计数,并将该计数与mim- max值一起存储在另一个临时表中。
是否有其他简便更好的方法来实现此输出。请指教。
也许与SUM和CASE:
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
演示版
或者,对于范围表,您可以使用LEFT OUTER JOIN,GROUP BY+ COUNT:
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]