Группа PostgreSQL по ошибке - PullRequest
       8

Группа PostgreSQL по ошибке

0 голосов
/ 28 августа 2018

У меня есть отношение в базе данных PostgreSQL, называемое «processing_data», имеющее следующую схему:

Дата -> тип даты, shop_id -> целочисленный тип, item_category_id -> целочисленный тип, sum_item_cnt_day -> действительный тип.

Отображение первых 5 строк отношения выглядит следующим образом:

date  |  shop_id  |  item_category_id  |  sum_item_cnt_day

------+-----------+--------------------+------------------

2014-12-29  |  49  |  3  |  4

2014-12-29  |  49  |  6  |  1

2014-12-29  |  49  |  7  |  1

2014-12-29  |  49  |  12  |  3

2014-12-29  |  49  |  16  |  1

Теперь «shop_id» имеет 60 уникальных магазинов в диапазоне от 0 до 59, где каждый магазин продает несколько товаров, сгруппированных в новый столбец «item_category_id», где «sum_item_cnt_day» обозначает количество товаров, проданных магазином, и его item_category_id.

Сейчас я пытаюсь еще больше агрегировать данные, просто пытаясь получить следующие столбцы в качестве окончательного результата-

date, shop_id, sum_item_cnt_day

Таким образом, данные агрегируются в соответствии с количеством всех товаров, проданных в item_category_id для каждого магазина (обозначается shop_id) и расчетной суммой sum_item_cnt_day.

Когда я пытаюсь выполнить следующую команду SQL-

select date, shop_id, sum(sum_item_cnt_day) from processed_data group by shop_id;

выдает ошибку-

ОШИБКА: столбец «processing_data.date» должен появляться в предложении GROUP BY или использоваться в статистической функции ЛИНИЯ 1: выберите дату, shop_id, сумму (sum_item_cnt_day) из обработанных_д ... ^

Даже следующая команда SQL-

select date, shop_id, sum(sum_item_cnt_day) from processed_data where date between '2013-01-01' and '2013-01-31' group by shop_id;

выдает ошибку-

ОШИБКА: столбец «processing_data.date» должен появляться в предложении GROUP BY или использоваться в статистической функции ЛИНИЯ 1: выберите дату, shop_id, сумму (sum_item_cnt_day) из обработанных_д ... ^

Какие-нибудь предложения относительно того, что идет не так и что я пропускаю?

Спасибо!

1 Ответ

0 голосов
/ 28 августа 2018

Самое простое решение, которое, я думаю, вам нужно, состояло бы в том, чтобы просто добавить date к предложению GROUP BY:

SELECT date, shop_id, SUM(sum_item_cnt_day)
FROM processed_data
GROUP BY date, shop_id;

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

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