Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search archives
  Advanced Search

Re: Expression on an Expression alias


  • From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
  • To: "Mike Ellsworth" <younicycle(at)gmail(dot)com>
  • Cc: pgsql-novice(at)postgresql(dot)org
  • Subject: Re: Expression on an Expression alias
  • Date: Fri, 18 Apr 2008 16:31:57 -0400
  • Message-id: <23531.1208550717@sss.pgh.pa.us> <text/plain>

"Mike Ellsworth" <younicycle(at)gmail(dot)com> writes:
> The *effect* I'd like is to 'reuse' FV1, ~

> SELECT
> fv_test.acct_val AS acct_val,
> fv_test.time AS time,
> fv_test.i AS interest_rate,
> FV(fv_test.acct_val,fv_test.i,fv_test.time) AS FV1,
> FV1 *2 AS FV2,
> FV1 *3 AS FV3
> FROM    "hrcommu"."fv_test"

This is flat out invalid according to the SQL spec.  The SELECT
expressions are notionally computed in parallel and so can't refer
to each other.

You can do something vaguely like what you want with nested
SELECTs:

SELECT
FV1,
FV1 *2 AS FV2,
FV1 *3 AS FV3
FROM
(SELECT
   FV(fv_test.acct_val,fv_test.i,fv_test.time) AS FV1
 FROM    "hrcommu"."fv_test"
) ss;

although how much advantage there is is debatable.
(In particular, this is very likely to still call fv()
three times per row.)

			regards, tom lane



Home | Main Index | Thread Index

Privacy Policy | About PostgreSQL
Copyright © 1996 – 2012 PostgreSQL Global Development Group