Вычисляемые поля с if или case в запросе - MySQL
Формулировка задачи:
Мне необходимо получить выборку такого вида
мес Y2015 y2016
---------------------
01 3000 5000
02 700 40
04 100 700
исходник выглядит так
data summa
Я пытаюсь писать
Select month(datapr), if (year(data)='2015' as y2005, sum(summa),0), if(year(data)='2016' as y2016, sum(summa),0) Group by month(datapr)
Но по этому запросу я получаю данные только в столбце "2015". В столбце "2016" - нули, хотя данные на 2016 год в базе есть. Если убираю вычисляемое поле y2015 то получаю данные по 2016 году. Что я делаю не так или может есть другой способ?
Решение задачи: «Вычисляемые поля с if или case в запросе»
textual
Листинг программы
SELECT m 'месяц', SUM(s2015) 'год 2015', SUM(s2016) 'год 2016' FROM ( SELECT MONTH(dt) m, s2015, s2016 FROM ( SELECT last_day(dt) dt, SUM(IF(YEAR(dt) = '2015', dsc, 0)) s2015, SUM(IF(YEAR(dt) = '2016', dsc, 0)) s2016 FROM tst GROUP BY 1 ) a ) b GROUP BY 1;
Объяснение кода листинга программы
- Сначала определяется итоговая таблица, в которую будут включены только два столбца:
месяц
игод 2015
. - Затем формируются три вложенных запроса.
- Во втором вложенном запросе происходит группировка данных по году.
- В третьем вложенном запросе происходит вычисление суммы для каждого месяца.
- В итоге, в первом запросе происходит суммирование данных за 2015 и 2016 годы и вывод результата в виде двух столбцов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д