запрос на присоединение к MySQL
Вопрос
У меня есть запрос со следующими таблицами (уменьшен, чтобы показывать только заинтересованные столбцы).
t1
code
t2
code, period, status
t3
period, desc
Теперь то, что у меня есть,
t3 является таблицей уникальных "периодов".
t1 - таблица уникальных кодов.
t2 - это таблица соединений, связывающая их вместе, вместе со статусом, в этом примере status = (A, B, C).
Я создаю результат запроса, сгруппированный по " period " и имеет количество «кодов» в каждом статусе.
Это легко решить, но я хочу расширить это, чтобы иметь не только количество кодов в A, B и C, но также количество кодов, которые не связаны с периодом или другими словами, количество кодов, которые не находятся в t2 для данного периода.
Итак, результат, который я ищу,
Period A B C (Codes from t1 not found in t2)
P1 10 5 2 3
P2 5 5 5 10
Решение
Вы можете использовать перекрестное соединение, чтобы выбрать матрицу всех кодов для всех периодов. Это позволяет подсчитывать строки, которых нет:
select
sum(case when t2.status is 'A' then 1 else 0 end) as ACount,
sum(case when t2.status is 'B' then 1 else 0 end) as BCount,
...
sum(case when t2.code is null then 1 else 0 end) as NotPresentCount
from t1
cross join t3
left join t2
on t2.code = t1.code and t2.period = t3.period
group by t3.period