【发布时间】:2017-03-20 22:37:08
【问题描述】:
我有订单和行表。
一个订单可以有一行或多行。
一行引用product(购买的产品),date_at(可以想到一张票。可以使用这张票的日期)
create table o (
id integer NOT NULL
);
CREATE TABLE line (
id integer NOT NULL,
order_id integer NOT NULL,
product_id integer NOT NULL,
date_at date
);
我正在寻找每个日期有多少bookings/reservations。
我可以获取每个日期的(date_at, count) 列表
select date(t3.date_at), count(*)
from (
select t1.id, date(t2.date_at) as date_at, count(*)
from o t1
inner join line t2 on t1.id = t2.order_id
group by t1.id, date(t2.date_at)) t3
group by date(t3.date_at);
现在我想要每个产品的结果。
即我想为每个 product_id 获取包含该产品的订单的 (date, count) 列表(至少一行包含 product_id 的订单)。
我可以使用不同的{product_id} 在循环中运行以下查询,但我想可能有更好的方法
select date(t3.date_at), count(*)
from (
select t1.id, date(t2.date_at) as date_at, count(*)
from o t1
inner join line t2 on t1.id = t2.order_id
where t2.product_id={product_id}
group by t1.id, date(t2.date_at)) t3
group by date(t3.date_at);
我正在使用 postgres。
【问题讨论】:
-
为什么要将订单日期放在
line表中?并且,用您正在使用的数据库标记您的问题。 -
您不应按订单 ID 分组以获取每个日期的订单数
-
@GordonLinoff 我编辑了操作,不是订单日期,而是与产品相关的日期。
-
@McNets: postgres
标签: sql postgresql