Как суммировать значения по дням и группировать в postgresql?

у меня есть следующая таблица:

date value Group
2021-04-07 00:00:00 5 a
2021-04-07 00:00:00 10 b
2021-04-07 01:00:00 5 a
2021-04-07 01:00:00 4 b
2021-04-08 00:00:00 5 a
2021-04-08 00:00:00 8 b
2021-04-08 01:00:00 4 a
2021-04-08 01:00:00 5 b

И я хочу знать, как я могу суммировать значения по дням и группам, например:

date total_value Group
2021-04-07 10 a
2021-04-07 14 b
2021-04-08 9 a
2021-04-08 13 b

Надеюсь, кто-то может помочь мне с этим, спасибо заранее.


person Lautaro Aguilera    schedule 16.05.2021    source источник


Ответы (1)


Этого можно добиться с помощью агрегатной функции sum и группировки по date и group. Поскольку у вас есть данные временной метки, приведенное ниже решение приводит их к типу date и группирует, используя это. Наконец, в проекции я также использовал text, чтобы удалить дополнительную информацию о дате и просто предоставить YYYY-MM-DD.

Схема (PostgreSQL v11)

CREATE TABLE my_table (
  "date" TIMESTAMP,
  "value" INTEGER,
  "Group" VARCHAR(1)
);

INSERT INTO my_table
  ("date", "value", "Group")
VALUES
  ('2021-04-07 00:00:00', '5', 'a'),
  ('2021-04-07 00:00:00', '10', 'b'),
  ('2021-04-07 01:00:00', '5', 'a'),
  ('2021-04-07 01:00:00', '4', 'b'),
  ('2021-04-08 00:00:00', '5', 'a'),
  ('2021-04-08 00:00:00', '8', 'b'),
  ('2021-04-08 01:00:00', '4', 'a'),
  ('2021-04-08 01:00:00', '5', 'b');

Запрос №1

select
   "date"::date::text,
   sum(value) as total_value,
   "Group"
FROM
   my_table
GROUP BY
   "date"::date, "Group";
date total_value Group
2021-04-07 10 a
2021-04-07 14 b
2021-04-08 9 a
2021-04-08 13 b

Просмотр скрипта БД

person ggordon    schedule 16.05.2021