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。
答案 0 :(得分:3)
您可以使用:
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
答案 1 :(得分:0)
我们可以通过确保查询返回行来确保查询返回。
下面是一个示例,该示例从内联视图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