MySql SUM (), группировка по месяцам, месяцы с '0' не отображаются - PullRequest
1 голос
/ 17 июня 2011

У меня есть запрос MySql:

SELECT YEAR(date), MONTHNAME(date), SUM(block_time)
FROM flights
WHERE operator = 'PSD'
GROUP BY YEAR(date), MONTH(date)

Проблема, с которой я столкнулся, состоит в том, что если в месяце есть ноль часов, он не появляется в результатах.Что мне нужно изменить, чтобы увидеть все месяцы, есть ли время в этом месяце или нет?

Ответы [ 2 ]

1 голос
/ 17 июня 2011

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

SELECT myMonths.theYear, myMonths.theMonth, COALESCE(theData.hours, 0)
FROM myMonths
LEFT JOIN (
    SELECT YEAR(date) AS theYear, MONTHNAME(date) AS theMonth, SUM(block_time) AS hours
    FROM flights
    WHERE operator = 'PSD'
    GROUP BY YEAR(date), MONTHNAME(date)
) theData
ON myMonths.theYear = theData.theYear
AND myMonths.theMonth = theData.theMonth
0 голосов
/ 17 июня 2011

попробуй объединиться с теми, у кого нет часов

SELECT YEAR(date), MONTHNAME(date), SUM(block_time)
FROM flights
WHERE operator = 'PSD'
GROUP BY YEAR(date), MONTH(date)

UNION ALL 

SELECT YEAR(date), MONTHNAME(date), SUM(block_time)
FROM flights
WHERE hours = 0
GROUP BY YEAR(date), MONTH(date)
...