Re: A subselect in an aggregate

From: "Bryan White" <bryan(at)arcamax(dot)com>
To: "Ed Loehr" <eloehr(at)austin(dot)rr(dot)com>
Cc: "pgsql-sql" <pgsql-sql(at)postgreSQL(dot)org>
Subject: Re: A subselect in an aggregate
Date: 2000-06-26 19:03:39
Message-ID: 00ad01bfdfa1$3d64ad00$2dd260d1@arcamax.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

> Bryan White wrote:
> >
> > This statement works:
> > select date, (select sum(qty * price) from orderdetail d where d.orderid
=
> > orders.orderid) from orders
> >
> > But when I try to do something like this:
> >
> > select date, sum(select sum(qty * price) from orderdetail d where
d.orderid
> > = orders.orderid) from orders group by date
> >
> > I get ERROR: parser: parse error at or near "select"
> >
> > Is there a way to apply an agregate function to a subselect like this?
>
> Avoiding the question, I'm wondering if this simpler form wouldn't be
> what you're after?
>
> select o.date, sum(d.qty * d.price)
> from orderdetail d, orders o
> where d.orderid = o.orderid
> group by o.date

This is very slow (acutally I killed it after about 5 minutes):
select o.date,sum(d.qty * d.price) from orderdetail d,orders o where o.date
= '6/1/2000' group by o.date;
Explained:
Aggregate (cost=0.00..41074641.24 rows=120300337 width=20)
-> Group (cost=0.00..38067132.80 rows=1203003374 width=20)
-> Nested Loop (cost=0.00..35059624.37 rows=1203003374 width=20)
-> Index Scan using iorddate3 on orders o
(cost=0.00..6917.34 rows=1808 width=4)
-> Seq Scan on orderdetail d (cost=0.00..12733.78
rows=665378 width=16)

Doing a squential scan of orderdetail inside a loop seems to be what kills
it.

This is quick (it takes a couple of seconds):
select o.date,(select sum(od.qty * od.price) from orderdetail od where
od.orderid = o.orderid) from orders o where o.date = '6/1/2000';
Explained:
Index Scan using iorddate3 on orders o (cost=0.00..6917.34 rows=1808
width=8)
SubPlan
-> Aggregate (cost=45.24..45.24 rows=1 width=16)
-> Index Scan using iodid on orderdetail od (cost=0.00..45.21
rows=11 width=16)

I suppose I can do my own grouping on the result data but I would like to
avoid that if I could. Which brings me back to the original question: Is
there a way to apply an aggregate function to a subselect?

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Tom Lane 2000-06-26 22:31:46 Re: A subselect in an aggregate
Previous Message Joern Muehlencord 2000-06-26 18:14:09 case insensitive search