Вычисляемые поля с 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 годы и вывод результата в виде двух столбцов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д