【问题标题】:SQL Query not returning a value/new row when count = 0; I'd like it to return the 0当 count = 0 时,SQL 查询不返回值/新行;我希望它返回 0
【发布时间】:2021-05-15 14:14:13
【问题描述】:

我正在尝试构建一个非常简单的查询来返回特定条件的注册计数。数据库不包含一个完全符合我需要的表,所以我使用了一堆 CASE WHEN。但是,当某个 CASE WHEN 语句的注册为 0 时,查询不会返回一行,我希望它显示为 0。示例:

查询:

select
    (case
when f_id BETWEEN 5700 AND 5718 THEN 'Group A'
when f_id BETWEEN 5719 AND 5736 THEN 'Group B'
when f_id BETWEEN 5531 AND 5544 THEN 'Group C'
else 'Other'
end) as 'Title1',
count(s_id)
from table;

结果:

|Title1|count(s_id)|
|------|-----------|
|Group A|5|
|Group C|2|

我希望 B 组有一行在 count(s_id) 列中显示为 0。我已经在 CASE WHEN 和 IFNULL(count(s_id),0) 周围尝试了 IFNULL,查询要么出错,要么返回上面的同一张表。

我知道这非常简单,但我对 SQL 还是很陌生,所以任何建议都将不胜感激。谢谢!

【问题讨论】:

    标签: mysql sql count case-when


    【解决方案1】:

    如果您想要所有组,请使用left join。我建议:

    select coalesce(title, 'Other') as title, count(t.s_id)
    from (select 5700 as lo, 5718 as hi, 'Group A' as title union all
          select 5719 as lo, 5736 as hi, 'Group B' as title union all
          select 5531 as lo, 5444 as hi, 'Group AC' as title union all
         ) g left join
         table t
         on t.f_id between g.lo and g.hi
    group by title;
    

    【讨论】:

      猜你喜欢
      • 2017-12-01
      • 2021-08-25
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 2017-10-27
      • 2016-12-08
      • 1970-01-01
      相关资源
      最近更新 更多