SQL-запрос для подсчета в той же таблице с использованием левого внешнего соединения - PullRequest
1 голос
/ 17 января 2011

У меня есть таблица, из которой мне нужно получить счет, сгруппированный по двум столбцам.

Таблица содержит два столбца: один столбец datetime, а другой - значение успеха (-1,1,0)То, что я ищу, выглядит примерно так:

Количество значений успеха для каждого месяца:

месяц ---- успех ----- счет
11 ------- -1 ------- 50

11 ------- 1 --------- 50

11 ------- 0 ------- 50

12 ------- -1 ------- 50

12 ------- 1 ------- 50

12 ------- 0 ------- 50

Если в течение месяца значения успеха не будет, то счетчик должен быть null или ноль.Я также пытался использовать левое внешнее соединение, но бесполезно, оно неправильно подсчитывает счет.

Ответы [ 2 ]

1 голос
/ 17 января 2011

Вам необходимо перекрестное объединение всех доступных месяцев с 3 значениями успеха, чтобы построить виртуальную матрицу, которую затем можно оставить объединенной с фактическими данными

select m.month, s.success, COUNT(t.month)
from (select distinct MONTH from tbl) m
cross join (select -1 success union all select 1 union all select 0) s
left join tbl t on t.month = m.month and t.success = s.success
group by m.month, s.success

Если вам также нужны пропущенные месяцы, что можно сделать, только немного сложнее, изменив подзапрос "m" выше.

@ updated Count (*) всегда будет возвращать по крайней мере 1 для левых объединений.количество (имя) из правой части левого соединения будет правильным.

0 голосов
/ 17 января 2011

Вам, вероятно, нужна таблица с только значениями от 1 до 12, чтобы присоединиться к ней, чтобы вы могли получить нулевой счет.

...