Получить сумму, используя DATE_FORMAT () и IN - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть запрос, который выглядит примерно так:

SELECT sum(X) as qty 
FROM ...
WHERE ...
AND DATE_FORMAT(date,'%Y%m%d') IN (20100601,20100701,20100801,20100901,20101001)

Это, очевидно, дает мне результат, который выглядит следующим образом:

qty
226761

Но что яя хочу узнать количество для каждого отдельного формата даты:

qty      date
16000   20100601
57000   20100701
23000   20100801
30000   20100901
72000   20101001

Я новичок в SQL, поэтому я не знаю, как получить этот конкретный формат.Я просто ищу помощь алгоритмов, вы можете использовать случайные имена таблиц или строк, я не против.Я надеюсь, что мой вопрос ясен!

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вам нужно сгруппировать по DATE_FORMAT(date,'%Y%m%d')

SELECT DATE_FORMAT(date,'%Y%m%d') datex, sum(X) as qty 
FROM ...
WHERE ...
AND date IN ('20100601','20100701','20100801','20100901','20101001')
GROUP BY date 
0 голосов
/ 11 февраля 2019

Вам нужно GROUP BY:

SELECT date(date), sum(X) as qty 
FROM ...
WHERE ... AND
      date(date) IN ('2010-06-01', '2010-07-01', '2010-08-01', '2010-09-01', '2010-10-01')
GROUP BY date(date);

Вы заметите, что я удалил date_format().Преобразование дат в строки - плохая привычка, и в этом нет необходимости.Если date не имеет компонента времени (как следует из его названия), то date() даже не требуется.

РЕДАКТИРОВАТЬ:

Использование date_format() предполагает, что ваши датыхранится как даты .Если это не так, то вы можете просто сделать:

SELECT date, sum(X) as qty 
FROM ...
WHERE ... AND
      date IN ('20100601', '20100701', '20100801', '20100901', '20101001')
GROUP BY date;

Бросить одинарные кавычки, если дата чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...