using top-level aggregate values in subqueries

Поиск
Список
Период
Сортировка
От Thomas F. O'Connell
Тема using top-level aggregate values in subqueries
Дата
Msg-id 3AE4C818.5000804@monsterlabs.com
обсуждение исходный текст
Ответы Re: using top-level aggregate values in subqueries  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-sql
from the docs, i know that if you have two tables, foo and bar, you can 
write a query such as

select f.bling
from foo f
where f.id = (select max( b.id )from bar bwhere b.bling = "i kiss you!"
);

what i'm wondering is if you need that subquery in two places in a query 
if there's some way to cache it at the top level.

for instance, if i were shooting for

select f.id
from foo f, ola o
where f.id = (select max( b.id )from bar bwhere b.bling = "i kiss you!"
)
and o.id != (select max( b.id )from bar bwhere b.bling = "i kiss you!"
)

is there some way to grab the value returned by the subquery in the 
superquery and use the value instead of running the subquery twice?

i'm not looking for an optimized version of my example (unless it 
answers the question of the bigger picture); i'd rather know if there's 
some way to access top-level aggregates from within a subquery.

or find out that postgres is smart enough to recognize bits of SQL in a 
query that are identical and do its own internal caching.

generically stated, my question is:

is there some way, without writing a function, to calculate an aggregate 
value in a query that is used in multiple subqueries without needing to 
run an aggregating query multiple times?

i know it only amounts to syntactic sugar, but, as such, it would be 
pretty sweet.

thanks.

-tfo



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

Предыдущее
От: "Josh Berkus"
Дата:
Сообщение: Re: Problems handling errors in PL/pgSQL
Следующее
От: Tom Lane
Дата:
Сообщение: Re: using top-level aggregate values in subqueries