gpt4 book ai didi

sql - 加入 PostgreSQL 中每一行的所有行

转载 作者:行者123 更新时间:2023-11-29 12:08:03 25 4
gpt4 key购买 nike

我有一个类似于以下的数据集:

CREATE TABLE revenue (
employee_id int,
job_id int,
date date,
revenue numeric (9,2)
);

INSERT INTO revenue (employee_id, job_id, date, revenue) VALUES (1, 123, '2018-07-16', 100);
INSERT INTO revenue (employee_id, job_id, date, revenue) VALUES (1, 124, '2018-07-17', 100);
INSERT INTO revenue (employee_id, job_id, date, revenue) VALUES (2, 125, '2018-07-14', 100);
INSERT INTO revenue (employee_id, job_id, date, revenue) VALUES (2, 126, '2018-07-16', 100);

我编写了以下查询并得到了以下输出:

SELECT employee_id, generate_series::date, SUM(revenue) as revenue
FROM generate_series('2018-07-14'::date, '2018-07-17'::date, '1 day')
LEFT JOIN revenue ON revenue.date = generate_series::date
GROUP BY employee_id, generate_series::date
ORDER BY employee_id, generate_series::date;

+---------------+-------------------+-----------+
| employee_id | generate_series | revenue |
|---------------+-------------------+-----------|
| 1 | 2018-07-16 | 100.00 |
| 1 | 2018-07-17 | 100.00 |
| 2 | 2018-07-14 | 100.00 |
| 2 | 2018-07-16 | 100.00 |
| <null> | 2018-07-15 | <null> |
+---------------+-------------------+-----------+
SELECT 5
Time: 0.010s
super>

但我的目标是即使没有收入也能获得所有员工的所有日期。

这是我想要的输出:

+---------------+-------------------+-----------+
| employee_id | generate_series | revenue |
|---------------+-------------------+-----------|
| 1 | 2018-07-14 | 0.00 |
| 1 | 2018-07-15 | 0.00 |
| 1 | 2018-07-16 | 100.00 |
| 1 | 2018-07-17 | 100.00 |
| 2 | 2018-07-14 | 100.00 |
| 2 | 2018-07-15 | 0.00 |
| 2 | 2018-07-16 | 100.00 |
| 2 | 2018-07-17 | 0.00 |
+---------------+-------------------+-----------+

有人知道如何实现吗?

最佳答案

使用交叉连接生成行,然后使用左连接引入数据:

select e.employee_id, gs.dte, coalesce(revenue, 0) as revenue
from generate_series('2018-07-14'::date, '2018-07-17'::date, '1 day') gs(dte) cross join
(select distinct employee_id from revenue) e left join
revenue r
on r.employee_id = e.employee_id and r.date = gs.dte
order by employee_id, gs.date;

我不认为 group by 是必要的。每个员工和日期最多只有一行。

关于sql - 加入 PostgreSQL 中每一行的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51387905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com