Включить строки, которые не соответствуют предложению IN () - PullRequest
0 голосов
/ 03 марта 2020

У меня есть таблица с именем log, которая содержит журналы, отправленные несколькими приложениями. В этой таблице есть поле varchar с именем reference.

. В Grafana есть панель таблиц, в которой я показываю, сколько журналов мы сгруппировали по значениям reference. Таким образом, пользователь вводит одно или несколько значений в текстовое поле в Grafana, например 'ref1', 'ref2', 'ref3', и запускается такой запрос:

SELECT reference, count(id)
FROM db.log
WHERE reference IN('ref1', 'ref2', 'ref3')
GROUP BY reference

Пока все хорошо, все работает как задумано. Я хотел бы показать строку с count=0 на случай, если журнал с указанным reference не существует. Я знаю, что могу добавить произвольные строки, используя UNION, но я думаю, что не могу сделать это в Grafana динамически.

Есть идеи?

1 Ответ

0 голосов
/ 03 марта 2020

Используйте запрос, который возвращает все значения, для которых вы хотите результаты, и оставьте объединенную таблицу для агрегирования:

select t.reference, count(l.id) 
from (
  select 'ref1' reference union all
  select 'ref2' union all
  select 'ref3' 
) t left join db.log l
on l.reference = t.reference
group by t.reference

См. Упрощенную демонстрацию .

...