Kar*_*arl 1 sql aggregate zero
我想问的问题最好通过一个例子说明,所以请耐心等待.假设我有下表:
TypeID Gender Count
1 M 10
1 F 3
1 F 6
3 M 11
3 M 8
Run Code Online (Sandbox Code Playgroud)
我想为TypeID和Gender的每种可能组合聚合这个.其中TypeID可以是1,2或3,而Gender可以是M或F.所以我想要的是以下内容:
TypeID Gender SUM(Count)
1 M 10
1 F 9
2 M 0
2 F 0
3 M 19
3 F 0
Run Code Online (Sandbox Code Playgroud)
我可以想到一些可能做到这一点的方法,但对我来说,它们似乎都不是特别优雅.
任何建议将不胜感激!
卡尔
使用派生表创建要返回的行,并使用左连接来获取计数.使用COALESCE将任何NULL计数转换为零.
SELECT TypeIds.TypeId, Genders.Gender, COALESCE(SUM(T1.Count), 0)
FROM (
SELECT 1 AS TypeId
UNION ALL
SELECT 2
UNION ALL
SELECT 3
) AS TypeIds
CROSS JOIN (
SELECT 'M' AS Gender
UNION ALL
SELECT 'F'
) AS Genders
LEFT JOIN Table1 AS T1
ON TypeIds.TypeId = T1.TypeId AND Genders.Gender = T1.Gender
GROUP BY TypeIds.TypeId, Genders.Gender
Run Code Online (Sandbox Code Playgroud)
可能值得考虑在数据库中创建这些性别和类型ID表,以便您可以加入它们.如果允许的类型ID列表将来可能会更改,那么您只需更新表而不是所有具有硬编码值列表的查询.
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |