每天创建的记录数

Mat*_*ski 8 sql postgresql

在我的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中有没有办法做到这一点?

https://www.db-fiddle.com/f/gvxijmp8u6wr6mYcSoAeVV/2

Mat*_*ski 6

我决定用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)

查询工作正常.也许还有更好的方法吗?

  • 嗯,`generate_series`是一个很不错的功能,我不知道! (2认同)