在我的PostgreSQL数据库中,我有以下架构:
CREATE TABLE programs (
id integer,
description text
);
CREATE TABLE public.messages (
id integer,
program_id integer,
text text,
message_template_id integer
);
CREATE TABLE public.message_templates (
id integer,
deliver_day integer
);
INSERT INTO programs VALUES(1, 'Test program');
INSERT INTO messages VALUES(1,1, 'Test message 1', 1);
INSERT INTO message_templates VALUES(1, 1);
INSERT INTO messages VALUES(2,1, 'Test message 2', 2);
INSERT INTO message_templates VALUES(2, 3);
INSERT INTO messages VALUES(3,1, 'Test message 3', 3);
INSERT INTO message_templates VALUES(3, 5);
Run Code Online (Sandbox Code Playgroud)
现在我想在程序的整个生命周期中获取每天发送的消息数量,查询结果应如下所示:
day count
--------|----------
1 1
2 0
3 1
4 0
5 1
Run Code Online (Sandbox Code Playgroud)
在PostgreSQL中有没有办法做到这一点?
我决定用generate_series:
SELECT d AS "Day", count(mt.id) FROM generate_series(
(SELECT min(delivery_day) from message_templates),
(SELECT max(delivery_day) from message_templates)
) d
left join message_templates mt on mt.delivery_day = d
group by d.d
Run Code Online (Sandbox Code Playgroud)
查询工作正常.也许还有更好的方法吗?
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |