gpt4 book ai didi

sql - 使用 SQL 将年龄间隔作为行统计信息

转载 作者:行者123 更新时间:2023-12-04 20:38:15 24 4
gpt4 key购买 nike

我正在尝试创建这个汇总统计表,计算每个类别中的个人数量

Agegroup   |    All    |    Female   |    Male
------------------------------------------------
All | 560594 | 34324 | 234244
< 20 | 4324 | 545 | 3456
20 - 30 | 76766 | 3424 | 32428
30 - 40 | 36766 | 764 | 82427
40 - 50 | 46766 | 4324 | 72422
50 - 60 | 66766 | 3424 | 52424
> 60 | 76766 | 43424 | 12423

从这张表

PersonID  |   Age   |  Sex   
----------------------------
A | 43 | F
B | 22 | F
C | 65 | M
D | 33 | F
E | 28 | M

这甚至可以用 SQL “一次性”完成吗?我对此进行了实验,但它并没有真正融合在一起..

SELECT SUM(CASE WHEN Age < 20 THEN 1 ELSE 0 END) AS [Under 20],
SUM(CASE WHEN Age BETWEEN 20 AND 30 THEN 1 ELSE 0 END) AS [20-30],
SUM(CASE WHEN Age BETWEEN 30 AND 40 THEN 1 ELSE 0 END) AS [30-40]
FROM Persons

最佳答案

我相信以下是实现这一目标的最简单方法,即使该年龄范围内没有人,也可以恢复该行。此外,由于 Sex 只有 2 个可能的值,您可以使用 NULLIF 代替 case 表达式。

SELECT  [Agegroup] = Name,
[All] = COUNT(Person.PersonID),
[Female] = COUNT(NULLIF(Person.Sex, 'M')),
[Male] = COUNT(NULLIF(Person.Sex, 'F'))
FROM (VALUES
(0, 1000, 'All'),
(0, 20, '< 20'),
(20, 30, '20 - 30'),
(30, 40, '30 - 40'),
(40, 50, '40 - 40'),
(50, 60, '50 - 40'),
(60, 1000, '> 60')
) AgeRange (MinValue, MaxValue, Name)
LEFT JOIN Person
ON Person.Age >= AgeRange.MinValue
AND Person.Age < AgeRange.Maxvalue
GROUP BY AgeRange.Name, AgeRange.MinValue, AgeRange.Maxvalue
ORDER BY AgeRange.MinValue, AgeRange.MaxValue DESC

Example on SQL Fiddle

关于sql - 使用 SQL 将年龄间隔作为行统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13154023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com