Re: A subselect in an aggregate

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: A subselect in an aggregate
Дата
Msg-id 19423.962058706@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: A subselect in an aggregate  ("Bryan White" <bryan@arcamax.com>)
Список pgsql-sql
"Bryan White" <bryan@arcamax.com> writes:
> 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;

> 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';

Well, they're not computing the same thing, are they?  Since there's no
constraint on d.orderid in the first example, you're asking for the sum
over ALL orderdetail records ... repeated over again for each order
record.  For equivalent constraints, I'd expect the first form to be
at least as fast as the second, probably faster.

> Which brings me back to the original question:  Is
> there a way to apply an aggregate function to a subselect?

Sure --- you just forgot that a sub-select expression requires its
very own parentheses, so you need two sets:sum((select ....))
But the other way is probably better...
        regards, tom lane


В списке pgsql-sql по дате отправления:

Предыдущее
От: "Bryan White"
Дата:
Сообщение: Re: A subselect in an aggregate
Следующее
От: "Gary MacMinn"
Дата:
Сообщение: Re: Merging two columns into one