我有订单和行表。
订单可以有一行或多行 一行引用产品(已购买的产品),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。
答案 0 :(得分:2)
您的查询似乎太复杂了。我认为这样做你想要的:
select product_id, date(date_at), count(*) as cnt
from line l
group by product_id, date(date_at)
order by product_id, date(date_at);
如果产品可以出现在订单中的多行中,请使用:
select product_id, date(date_at), count(distinct order_id) as cnt
from line l
group by product_id, date(date_at)
order by product_id, date(date_at);
您甚至不需要join
返回orders
。不过,我会指出,orders
中的日期对我来说比lines
更有意义。