Search Postgresql Archives

Re: How to refer to computed columns from other computed columns?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 16.08.2010 14:45, schrieb Matthew Wilson:
I'm converting some procedural code to SQL as an experiment.  Here's the
pseudocode:

     c = a - b
     if c<  0 then d = 'no'
     else d = 'yes'

In SQL, I've got this:

     select a, b, a - b as c,
     case when a - b<  0 then 'no'
     else 'yes'
     end as d

     from foo;

This is a trivial example, but you can see how I calculate a - b two
separate times.

In reality, I have much nastier calculations and they happen more than
just twice.

I'm looking for an elegant solution for this puzzle.  I don't want to
repeat that a - b part over and over because I likely will need to
change how c gets defined and I don't want to have to change more than
one place in the code.

All I can come up with so far is to use a view and then another view on
top of that one:

     create view v1 as
     select a, b, a - b as c
     from foo;

     create view v2 as
     select a, b, c,
     case when c<  0 then 'no'
     else 'yes'
     end as d
     from v1;

This is better than the first solution because c is only defined in a
single place.  Is this the best possible solution?

Thanks for the help.

Matt


You can also use the ' with Queries ' option to solve this Problem like this:

with table_1 as (select a,b, a-b as c from foo)
Select a,b, c,
case when c<0 then 'no'
         else 'yes' end as d
         from table_1;
I hope , it will help you

--
Eric Ndengang
Junior Datenbankentwickler

Affinitas GmbH  |  Kohlfurter Straße 41/43  |  10999 Berlin  |  Germany
email: eric.ndengang_foyet@xxxxxxxxxxxx  | tel: +49.(0)30. 991 949 5 0  |  www.edarling.de

Geschäftsführer: Lukas Brosseder, David Khalil, Kai Rieke, Christian Vollmann
Eingetragen beim Amtsgericht Berlin, HRB 115958


--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux