【问题标题】:How do I return 0 when my sql returns with no rows?当我的 sql 返回没有行时,如何返回 0?
【发布时间】:2019-06-26 18:47:21
【问题描述】:
select a, count (b) 
from table1 where b in ( select distict b from table2) 
and table1.dated>=DATE('yy/mm/dd') 
group by a;

在上面的 SQL 中,当我有 count(b)>0 时,它会返回列,但当 count=0 时,则不会返回任何行

我确实尝试过 UNION、NULLIF() 和 SELECT(SELECT()),但没有任何效果。

如果计数等于 0,我希望返回 0。

https://www.db-fiddle.com/#&togetherjs=2AkxeMUrPF

【问题讨论】:

  • 更新您的问题并添加适当的数据样本

标签: mysql sql database informix


【解决方案1】:

你可以使用:

select table1.a, count(DISTINCT table2.b) 
from table1
LEFT JOIN table2
  ON table1.b = table2.b
  AND table1.dated>=DATE('yy/mm/dd') -- this comparision is simply incorrect
group by table1.a

【讨论】:

  • 日期列属于 table1。当我使用上面的示例时,我得到了与原始查询相同的空结果,但感谢您的快速响应。
  • 即使在上面的sql中,当count为0时,也没有返回任何行但是期望table1.a为data 1,count为0
  • @Sundar 我希望现在一切都清楚了。请考虑接受答案
  • 谢谢,你的回答拯救了我的一天!
【解决方案2】:

我们可以通过让查询保证它来确保查询返回一行。

这是一个从内联视图 i 中准确检索一行的示例。

然后外部连接到另一个内联视图s,它会获得不同的值列表。

然后是另一个外部连接到table1

SELECT t.a
     , COUNT(t.b) AS cnt
  FROM ( SELECT 1 AS n ) i 
  LEFT
  JOIN ( SELECT DISTINCT r.b 
           FROM table2 r
       ) s
  LEFT
  JOIN table1 t
    ON t.b      = s.b
   AND t.dated >= ...
 GROUP
    BY i.n
     , t.a

如果内联视图s 没有返回任何行,查询应该返回

 a      cnt
 ----   ---
 NULL     0

【讨论】:

    猜你喜欢
    • 2021-05-15
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2011-08-23
    • 2011-12-14
    • 2012-04-25
    • 2022-01-24
    相关资源
    最近更新 更多