запрос на присоединение к MySQL - PullRequest
0 голосов
/ 26 ноября 2009

У меня есть запрос со следующими таблицами (уменьшены, чтобы показать только заинтересованные столбцы).

t1
code

t2
code, period, status

t3
period, desc

Теперь, что у меня есть,

t3 - таблица уникальных «периодов».

t1 - таблица уникальных кодов.

t2 - это таблица соединений, связывающая их вместе, вместе со статусом, в этом примере status = (A, B, C).

То, что я делаю, - это создаю результат запроса, который группируется по «периоду» и имеет количество «кодов» в каждом статусе.

Это легко решить, но я хочу расширить это, чтобы иметь не только количество кодов в 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

1 Ответ

1 голос
/ 26 ноября 2009

Вы можете использовать перекрестное соединение, чтобы выбрать матрицу всех кодов для всех периодов. Это позволяет подсчитать строки, которых нет:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...