【问题标题】:How to select grouped rows with only NULL values?如何选择只有 NULL 值的分组行?
【发布时间】:2017-10-04 08:43:45
【问题描述】:

如果我有这样的桌子

task_id | state
--------+------------ 
   1    |  NULL
--------+------------
   1    |  RESOLVED
--------+------------
   2    |  NULL
--------+------------
   2    |  NULL

如何通过状态仅为 NULL 的 task_id 获取分组行。在这种情况下,只有 task_id 为 2 的行。

【问题讨论】:

  • 你想要task_id 2,还是task_id = 2的两行?
  • 如果我通过 task_id 写了 groped row,你怎么看?
  • 我觉得摸索的想法

标签: mysql sql group-by


【解决方案1】:

做一个GROUP BY,使用HAVING返回只有空状态的task_id。

select task_id
from tablename
group by task_id
having max(state) is null

【讨论】:

    【解决方案2】:

    试试这个 -

    SELECT task_id
    FROM YOUR_TABLE
    WHERE state NOT IN (SELECT task_id
                        FROM YOUR_TABLE
                        WHERE task_id IS NOT NULL)
    

    【讨论】:

    • 有没有办法将其重写为连接而不是子选择?
    • 纯代码答案在 Stackoverflow 上的价值很低,因为它们对教育/授权成千上万的未来研究人员几乎没有作用。
    【解决方案3】:

    这是我的方法:

        Select  * from yourTable where state is null and task_id not in 
        (select task_id from yourTable y where state is not null )
    

    【讨论】:

    • 我认为这不会只返回 task_id = 2
    • 有没有办法将其重写为连接而不是子选择?
    • 纯代码答案在 Stackoverflow 上的价值很低,因为它们对教育/授权成千上万的未来研究人员几乎没有作用。
    【解决方案4】:

    由于COUNT函数在指定特定列的情况下会忽略NULL,因此您可以使用group bycounthaving,如下所示。

    SELECT task_id
    FROM t1
    GROUP BY task_id
    HAVING count(STATE) = 0;
    

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-28
      • 2021-06-08
      • 2019-12-06
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多