CREATE TABLE costs (
id SERIAL PRIMARY KEY,
entry_date DATE,
costs DECIMAL
);
INSERT INTO costs
(entry_date, costs)
VALUES
('2020-01-01', '500'),
('2020-02-01', '325'),
('2020-03-01', '200'),
('2020-04-01', '400'),
('2020-05-01', '900'),
('2020-06-01', '700'),
('2020-07-01', '900'),
('2020-08-01', '100'),
('2020-09-01', '300'),
('2020-10-01', '850'),
('2020-11-01', '470'),
('2020-12-01', '800');
预期结果:
date_list | costs
--------------|----------------------------
2020-01-01 | 16.12 (=500/31)
2020-01-02 | 16.12 (=500/31)
2020-01-03 | 16.12 (=500/31)
2020-01-04 | 16.12 (=500/31)
: | :
: | :
2020-12-29 | 25.81 (=800/31)
2020-12-30 | 25.81 (=800/31)
2020-12-31 | 25.81 (=800/31)
在表中,我将每月的费用分配给了每月的一天。
现在,我想创建一个包含每个月所有天数的列表,并将每个月的费用平均分配给每一天。
SELECT
entry_date,
SUM(costs) AS costs
FROM costs
GROUP BY 1;
您知道我必须如何修改查询才能获得预期结果吗?
答案 0 :(得分:1)
SELECT
gs::date,
costs / COUNT(*) OVER (PARTITION BY entry_date) -- 3
FROM costs,
generate_series( -- 2
entry_date,
entry_date + interval '1 month - 1 day', -- 1
interval '1 day'
) gs
COUNT()
窗口函数在这里所做的