PG: co muze byt v HAVING/WHERE/ORDER BY?

Honza Pazdziora adelton na informatics.muni.cz
Úterý Říjen 29 10:29:23 CET 2002


On Mon, Oct 28, 2002 at 05:31:25PM +0100, Jan Kasprzak wrote:
> 
> mam PostgreSQL, snazim se z tabulky vybrat primarni klic a hodnotu, kterou
> vypocitam z ostatnich atributu, ale jen takove radky, ktere tuhle hodnotu
> maji vyssi nez nejaka mez. Lze tohle nejak udelat, aniz bych tu hodnotu
> musel pocitat jednak v SELECT primarni_klic, ta_hodnota a jednak v
> HAVING/WHERE? Kdyz si tu hodnotu pojmenuju, tak podle ni muzu delat
> ORDER BY, ale pokus o pouziti v HAVING/WHERE mi rika "undefined attribute":
> 
> > select primarni_klic, (9876*attr1-attr2*attr3) as hodnota
> 	where hodnota > 12345 order by hodnota
> ERROR:  Attribute 'hodnota' not found
> 
> Existuje nejaka cista cesta, jak tohle udelat, aniz bych vyraz pro vypocet
> "hodnota" musel vypisovat 2x? Napada me udelat view nebo udelat funkci, 
> ale porad mi je divne proc v order by ta "hodnota" byt muze, zatimco
> v having nebo where nikoliv.

Protoze to poradi vypoctu je nejdriv vyhodnotit where, aby se vedelo,
s cim pracujeme, pak spocitat ty polozky v selectu, aby se vedelo, co
se vraci, a pak nad tim provest agregace a razeni.

Domnivam se, ze jedna z moznosti by mohla byt

	select * from (
		select primarni_klic, (9876*attr1-attr2*attr3) as hodnota
		from tabulka
		)
	where hodnota > 12345
	order by hodnota

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
      ... all of these signs saying sorry but we're closed ...
------------------------------------------------------------------------


Další informace o konferenci Databases