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
|
Список | 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 по дате отправления: