Как я возвращаю 0, когда мой sql возвращается без строк? - PullRequest
2 голосов
/ 26 июня 2019
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

Ответы [ 2 ]

3 голосов
/ 26 июня 2019

Вы можете использовать:

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
0 голосов
/ 26 июня 2019

Мы можем гарантировать, что запрос вернет строку, если запрос гарантирует это.

Вот пример, который извлекает ровно одну строку из встроенного представления 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
...