Суммирование данных по дате в postgres - PullRequest
1 голос
/ 29 апреля 2020

Я написал запрос, который возвращает таблицу следующим образом (продажи - это не число, а идентификатор транзакции, поэтому я считаю количество идентификаторов):

select datestamp, product, count(sales) from table where datestamp > '2020-03-31'
and product <> ''
group by datestamp, product
order by datestamp
datestamp   product     sales

2020-04-01  product_1   4327
2020-04-01  product_2   1307
2020-04-01  product_3   551
2020-04-02  product_1   13106
2020-04-02  product_2   1169
2020-04-02  product_3   342
2020-04-03  product_1   178
2020-04-03  product_2   511
2020-04-03  product_3   416
2020-04-04  product_1   186
2020-04-04  product_2   127
2020-04-04  product_3   134

Я хочу сложить все sales на datestamp и разделить их на каждую продажу product, чтобы получить процент от количества продаж в день в каждой товарной категории:

datestamp   product     sales    percentage

2020-04-01  product_1   4327     = (4327 + 1307 + 551) / 4327
2020-04-01  product_2   1307     = (4327 + 1307 + 551) / 1307
2020-04-01  product_3   551      = (4327 + 1307 + 551) / 551
2020-04-02  product_1   13106    ...
2020-04-02  product_2   1169
2020-04-02  product_3   342
2020-04-03  product_1   178
2020-04-03  product_2   511
2020-04-03  product_3   416
2020-04-04  product_1   186
2020-04-04  product_2   127
2020-04-04  product_3   134

Как мне добиться такого результата?

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Попробуйте это:

DROP TABLE IF EXISTS DataSource;

CREATE TEMPORARY TABLE DataSource
(
    datestamp   DATE
   ,product VARCHAR(12)
   ,sales INT 
);

INSERT INTO DataSource (datestamp, product, sales)
VALUES ('2020-04-01', 'product_1',4327)
,('2020-04-01', 'product_2',1307)
,('2020-04-01', 'product_3',551)
,('2020-04-02', 'product_1',13106)
,('2020-04-02', 'product_2',1169)
,('2020-04-02', 'product_3',342)
,('2020-04-03', 'product_1',178)
,('2020-04-03', 'product_2',511)
,('2020-04-03', 'product_3',416)
,('2020-04-04', 'product_1',186)
,('2020-04-04', 'product_2',127)
,('2020-04-04', 'product_3',134);

select datestamp, product, sales, (sales * 1.0 / sum(sales) over (partition by datestamp)  )  * 100.0
from DataSource
order by datestamp;
0 голосов
/ 29 апреля 2020

Может быть, это работает

select datestamp, product, sales, sum(sales) over (partition by datestamp)/sales from (select datestamp, product, count(sales) as sales from table where datestamp > '2020-03-31'
and product <> ''
group by datestamp, product
order by datestamp) sub1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...