Вычисляемые поля с 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
Листинг программы
  1. SELECT
  2.   m 'месяц',
  3.   SUM(s2015) 'год 2015',
  4.   SUM(s2016) 'год 2016'
  5. FROM (
  6.   SELECT
  7.     MONTH(dt) m,
  8.     s2015,
  9.     s2016
  10.   FROM (
  11.     SELECT
  12.       last_day(dt) dt,
  13.       SUM(IF(YEAR(dt) = '2015', dsc, 0)) s2015,
  14.       SUM(IF(YEAR(dt) = '2016', dsc, 0)) s2016
  15.     FROM tst
  16.     GROUP BY 1
  17.   ) a
  18. ) b
  19. GROUP BY 1;

Объяснение кода листинга программы

  1. Сначала определяется итоговая таблица, в которую будут включены только два столбца: месяц и год 2015.
  2. Затем формируются три вложенных запроса.
  3. Во втором вложенном запросе происходит группировка данных по году.
  4. В третьем вложенном запросе происходит вычисление суммы для каждого месяца.
  5. В итоге, в первом запросе происходит суммирование данных за 2015 и 2016 годы и вывод результата в виде двух столбцов.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.733 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут