using top-level aggregate values in subqueries

From: "Thomas F(dot) O'Connell" <tfo(at)monsterlabs(dot)com>
To: pgsql-sql(at)postgresql(dot)org
Subject: using top-level aggregate values in subqueries
Date: 2001-04-24 00:26:00
Message-ID: 3AE4C818.5000804@monsterlabs.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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 b
where 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 b
where b.bling = "i kiss you!"
)
and o.id != (
select max( b.id )
from bar b
where 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

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Josh Berkus 2001-04-24 00:26:29 Re: Problems handling errors in PL/pgSQL
Previous Message Tom Lane 2001-04-24 00:19:13 Re: Problems handling errors in PL/pgSQL