Подсчитать количество строк в группе, даже если их ноль? - PullRequest
0 голосов
/ 20 июня 2020

Если у меня есть отношение collab(a1, a2) со строками

(a1, a2)

1, 2
1, 3
1, 3
2, 4

и другое отношение ident(a1) со строками

(a1)

1,
2,
3,
4,

Затем я могу для каждого значения a1 в ident извлечь a1 и количество a2 s, которые совпадают с этим конкретным значением a1 ?

Таким образом, мне нужен результат (a1, num_a2)

1, 2
2, 1
3, 0
4, 0

Ответы [ 2 ]

2 голосов
/ 20 июня 2020

Если я правильно понимаю ваше требование, следующий запрос должен помочь вам получить требуемый результат -

Здесь демонстрация

SELECT a1, count(a11)
FROM
(
    SELECT table_2.a1, table_1.a1 a11
    FROM table_2
    LEFT JOIN table_1 ON table_2.a1 = table_1.a1
)A
GROUP BY a1

Как сказал @GMB, вы подзапрос не требуется, так как это может быть достигнуто напрямую, как показано ниже:

Демо Здесь

SELECT table_2.a1, COUNT(table_1.a1)
FROM table_2
LEFT JOIN table_1 ON table_2.a1 = table_1.a1
GROUP BY table_2.a1
0 голосов
/ 20 июня 2020

Не знаю, правильно ли я понял. Но вот мой небольшой вклад:

Вы можете использовать функцию «COALESCE» для замены отсутствующих значений нулем. В этом случае вы выбираете свой список идентификаторов из таблицы IDENT и присоединяетесь к коллаборации таблицы с количеством номеров (отличным в вашем случае, поскольку вы хотите уникальные номера, как в вашем выводе) и заменяете все NA нулями:

ВЫБРАТЬ t1.a1, COALESCE (t2.NUMBER, 0)

FROM (ВЫБРАТЬ a1 ИЗ идентификатора) t1

LEFT JOIN

(SELECT a1, COUNT (DISTINCT a2) as N FROM collab GROUP BY a1) t2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...