首页 > 解决方案 > 使用 Group By 汇总表中的 Null 值

问题描述

我有两张桌子:

问题: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 但我什么也做不了。提前致谢!

标签: sqlsqlitegroup-by

解决方案


这是一个应该生成您预期的结果集的查询,尽管正如@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)。


推荐阅读