gpt4 book ai didi

sql - 用零填充 PostgreSQL 中缺失的日期

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

我在 PostgreSQL 中有一个这样的查询:

select count(id_student) students, date_beginning_course from 
data.sessions_courses
left join my_schema.students on id_session_course=id_sesion
where course_name='First course'
group by date_beginning_course

我通过此查询获得的是在几个日期参加过“第一门类(class)”类(class)的学生人数,例如:

Students  Date_beginning_course
____________________________________

5 2019-06-26
1 2019-06-28
5 2019-06-30
6 2019-07-01
2 2019-07-02

我想用缺失的日期值填充此表,并为每个缺失值在学生列中分配一个“0”,因为该日期没有学生。示例:

Students  Date_beginning_course
____________________________________

5 2019-06-26
0 2019-06-27 <--new row
1 2019-06-28
0 2019-06-29 <--new row
5 2019-06-30
6 2019-07-01
2 2019-07-02

你能帮帮我吗?谢谢! :)

最佳答案

您可以使用方便的 Postgres set-returning function generate_series() 生成日期列表和 LEFT JOIN 它与 sessions_coursesstudents 表:

SELECT
COUNT(s.id_student) students,
d.dt
FROM
(
SELECT dt::date
FROM generate_series('2019-06-26', '2019-07-02', '1 day'::interval) dt
) d
LEFT JOIN data.sessions_courses c
ON c.date_beginning_course = d.dt
AND c.course_name='First course'
LEFT JOIN my_schema.students s
ON s.id_session_course = c.id_session
GROUP BY d.dt

您可以通过修改 generate_series() 的前两个参数来更改日期范围。

注意:用相关的表名(或表别名)对查询中的列名进行索引是一个普遍的好习惯,因此每个列属于哪个表是明确的。我相应地更改了您的查询,并且不得不做出一些您可能需要适应的假设。

关于sql - 用零填充 PostgreSQL 中缺失的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57898023/

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