Re: Conditional ordering operators
От | Decibel! |
---|---|
Тема | Re: Conditional ordering operators |
Дата | |
Msg-id | B9D73EAC-B380-4FD8-82D3-EFC888CDAE81@decibel.org обсуждение исходный текст |
Ответ на | Conditional ordering operators ("Sergey Konoplev" <gray.ru@gmail.com>) |
Ответы |
Re: Conditional ordering operators
|
Список | pgsql-general |
You should start a project for this on pgFoundry. It looks very useful! On Feb 6, 2008, at 1:15 PM, Sergey Konoplev wrote: > Hello everybody. > > I've written a script (see attachment) which creates operators > > @< - ascending ordering > @> - descending ordering > > that allows you to replace code like this > > if <condition1> then > for > select <fields> > from <tables> > where <restrictions> > order by > field1 desc, > field2 > loop > <actions> > end loop; > elsif <condition2> then > for > select <fields> > from <tables> > where <restrictions> > order by > field3, > field1 desc, > field2 desc > loop > <actions> > end loop; > else > for > select <fields> > from <tables> > where <restrictions> > order by > field4 > loop > <actions> > end loop; > end if; > > that way > > for > select <fields> > from <tables> > where <restrictions> > order by > case when <condition1> then > @>field1 > @<field2 > when <condition2> then > @<field3 > @>field1 > @>field2 > else > @<field4 > end > loop > <actions> > end loop; > > It looks better, doesn't it? > > Also it provides Oracle like OVER PARTITION effect > > select * from ( > values > (1.2, '2007-11-23 12:00'::timestamp, true), > (1.4, '2007-11-23 12:00'::timestamp, true), > (1.2, '2007-11-23 12:00'::timestamp, false), > (1.4, '2007-01-23 12:00'::timestamp, false), > (3.5, '2007-08-31 13:35'::timestamp, false) > ) _ > order by > @<column1 || > case > when column1 = 1.2 then @<column3 > when column1 = 1.4 then @>column3 > else > @>column2 > @<column3 > end; > > column1 | column2 | column3 > ---------+---------------------+--------- > 1.2 | 2007-11-23 12:00:00 | f > 1.2 | 2007-11-23 12:00:00 | t > 1.4 | 2007-11-23 12:00:00 | t > 1.4 | 2007-01-23 12:00:00 | f > 3.5 | 2007-08-31 13:35:00 | f > (5 rows) > > Notice that rows 1-2 and 3-4 have opposite order in third column. > > p.s. Unfortunately I haven't manage yet with text fields because of > localization. > > -- > Regards, > Sergey Konoplev<conditional_ordering.sql> > ---------------------------(end of > broadcast)--------------------------- > TIP 5: don't forget to increase your free space map settings -- Decibel!, aka Jim C. Nasby, Database Architect decibel@decibel.org Give your computer some brain candy! www.distributed.net Team #1828
Вложения
В списке pgsql-general по дате отправления: