У меня есть таблица, где каждая строка представляет собой коррекцию с идентификатором, датой и причинами
id | date | causes
___________________________________
1 | 2018-01-29 08:49:19 | crash
2 | 2018-08-08 10:03:37 | timeout
3 | 2018-06-26 07:48:12 | other
Я использую этот запрос sql для получения количества исправлений по месяцам
SELECT YEAR(date) Year, MONTH(date) Month, count(*) Total FROM correction group by YEAR(date), MONTH(date)
Это дает мне такой результат
Year | Month | Total
____________________
2018 | 1 | 42
2018 | 2 | 69
2018 | 3 | 50
Возможно ли изменить запрос, чтобы получить число результатов по каждой причине и получить результат, например:
Year | Month | Total | crash | timeout | other
____________________________________________
2018 | 1 | 42 | 10 | 12 | 20
2018 | 2 | 69 | 9 | 50 | 10
2018 | 3 | 50 | 10 | 20 | 20
Вам нужна условная агрегация:
SELECT YEAR(date) Year, MONTH(date) Month, COUNT(*) Total,
SUM(causes = 'crash') crash,
SUM(causes = 'timeout') timeout,
SUM(causes = 'other') other
FROM correction c
GROUP BY YEAR(date), MONTH(date);