Вычисляемые поля с 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;

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

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

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


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

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

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