sql - 使用 Group By 汇总表中的 Null 值
问题描述
我有两张桌子:
- 人(ID,姓名)
- 运动(person_ID,运动)
问题:Sport 可以有 NULL 值。如果是这种情况,那么如果我按 ID 分组,那么这项运动应该是 NULL。
SELECT p.ID, p.Name, s.Sport
FROM Person p
INNER JOIN Sports s ON p.ID=s.person_id
GROUP BY p.ID
没有 Group By 表如下所示:
p.ID p.Name s.Sport
1 tom soccer
1 tom NULL
2 lisa golf
2 lisa soccer
3 tim golf
3 tim NULL
我现在想要的:
1 tom NULL
2 lisa golf
3 tim NULL
但我得到的是:
1 tom soccer
2 lisa golf
3 tim golf
我已经尝试过 subselects 和 ifs 但我什么也做不了。提前致谢!
解决方案
这是一个应该生成您预期的结果集的查询,尽管正如@jarlh 所指出的,尚不清楚为什么 Lisa 应该打高尔夫球而不是足球。
SELECT
p.ID,
p.Name,
CASE WHEN COUNT(CASE WHEN s.Sport IS NULL THEN 1 END) > 0
THEN NULL ELSE MIN(s.Sport) END AS Sport
FROM Person p
INNER JOIN Sports s
ON p.ID = s.person_id
GROUP BY
p.ID,
p.name;
请注意,我按ID
和分组name
,这在许多数据库上都是必需的(尽管可能不是 SQLite)。
推荐阅读
- mysql - Display SUM and LAST_VALUE groups by Year
- c# - 重新打开浏览器时如何获取最后一个正在进行的进程
- javascript - 在每个标签添加到 DOM 之前执行 JS 代码
- html - 带有图像和文本的框的纵横比 / Img 变窄到高度
- hibernate - Hibernate 选择不正确的 TypeDescriptor
- javascript - OpenLayers - 更改视图时地图消失了
- ivy - Ivy 将 pom.xml-Package-Tag 转换为 ivy.xml-Extension
- android - 无法将浮动操作按钮设置为剪切导航
- rabbitmq - 最后一条消息后的兔子 MQ 延迟
- json - Powershell 将 json 字符串转换为 xml 字符串总是产生 System.String