Postgresql 在postgres中按日期汇总数据
我编写了一个查询,返回如下表(sales不是一个数字,而是一个事务ID,因此我计算ID的出现次数): 我想将所有Postgresql 在postgres中按日期汇总数据,postgresql,Postgresql,我编写了一个查询,返回如下表(sales不是一个数字,而是一个事务ID,因此我计算ID的出现次数): 我想将所有销售额加上日期戳,然后除以产品的每次销售额,这样我就可以得到每个产品类别每天销售额的百分比: datestamp product sales percentage 2020-04-01 product_1 4327 = (4327 + 1307 + 551) / 4327 2020-04-01 product_2 1307 = (4327
销售额
加上日期戳
,然后除以产品的每次销售额
,这样我就可以得到每个产品类别每天销售额的百分比:
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
我怎样才能达到这样的效果呢?试试这个:
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;
我不认为它有效,我得到的是
2020-04-01
-`4.732211170619,1.429396810723,11的这些值,而不是每天加起来等于100的百分比。225045372050@JonasPalačionis我已更改代码,为您提供总额中每个值的%份额。
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
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;