Как сделать GROUP BY и суммировать, когда имена столбцов совпадают с SQL? - PullRequest
0 голосов
/ 06 февраля 2019

Это имена столбцов моей таблицы:

id_x | id_y | ts | data_a | data_b | data_c

Я выполняю этот запрос:

SELECT ts, data_a, data_b, data_c from table 
WHERE id_x=4392 
AND id_y IN (2545,2614,3349,4430) 
AND ts BETWEEN '2017-02-01' AND '2017-03-01' 

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

2017-02-01 | 4   | 4  | 0
2017-02-01 | 140 | 30 | 29
2017-02-02 | 4   | 4  | 0
2017-02-02 | 289 | 63 | 60

Поле ts указано более одного раза.Я предпочитаю иметь его один раз и суммировать его содержимое.
Можно ли сгруппировать столбец ts (timestamp) таким способом?

желаемый результат:

2017-02-01 | 144 | 34  | 29
2017-02-02 | 293 | 67  | 60

Ответы [ 2 ]

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

Вам нужно извлечь дату и объединить:

SELECT DATE(ts) as ts_date, SUM(data_a) as data_a,
       SUM(data_b) as data_b, SUM(data_c) as data_c 
FROM table 
WHERE id_x = 4392 AND 
      id_y IN (2545, 2614, 3349, 4430) AND
      ts >= '2017-02-01' AND
      ts < '2017-03-01'
GROUP BY DATE(ts) ;

Примечания:

  • Это извлекает дату из отметки времени.Предположительно, есть компонент времени.
  • GROUP BY и SUM() выполняют обработку, которую вы хотите.
  • Условия даты в предложении WHERE были изменены, поэтому вы получаете все значенияза февраль и ничего за март.

Если вы хотите, чтобы диапазон дат включал первое марта, используйте:

      ts >= '2017-02-01' AND
      ts < '2017-03-02'

Эта конструкция - с >= и < - работает как для даты, так и для даты / времени.Я настоятельно рекомендую не использовать BETWEEN с типами данных даты / времени, поскольку результаты могут вводить в заблуждение.

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

Вам нужно использовать sum() агрегацию и group by предложение

SELECT ts, sum(data_a), sum(data_b), sum(data_c) from table 
WHERE id_x=4392 
AND id_y IN (2545,2614,3349,4430) 
AND ts BETWEEN '2017-02-01' AND '2017-03-01' 
group by ts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...