Как генерировать синтетические c группы с нулевым счетом - PullRequest
0 голосов
/ 16 января 2020

Представьте, что у меня есть эти данные:

id   |   category
1    |   cat_1
2    |   cat_3
3    |   cat_3
4    |   cat_1

Обратите внимание, что нет значений cat_2, но я знаю, что cat_2 является возможным значением, и я хочу, чтобы отчеты отражали это.

Если я пишу простой запрос к COUNT элементам и GROUP BY категории, я получаю:

category   |   count(item)
cat_1      |   2
cat_3      |   2

Когда вместо этого я хочу:

category   |   count(item)
cat_1      |   2
cat_2      |   0
cat_3      |   2

Использование ванильный ANSI SQL, без определенного диалекта ... какой самый эффективный способ получить результат, который я получу? Я могу вспомнить несколько особенно хакерских подходов, но должен быть более чистый путь.

1 Ответ

3 голосов
/ 16 января 2020

В идеале у вас должна быть выделенная таблица category, которая отслеживает все категории, которые существуют и должны появиться в выводе вашего запроса. Если это не удалось, вы можете попробовать встроить подзапрос, содержащий все категории, которые вы хотите отобразить:

SELECT
    c.category,
    COUNT(t.id) AS cnt
FROM
(
    SELECT 'cat_1' AS category UNION ALL
    SELECT 'cat_2' UNION ALL
    SELECT 'cat_3'
) c
LEFT JOIN yourTable t
    ON c.category = t.category
GROUP BY
    c.category;
...