Re: CASE in ORDER BY clause - Mailing list pgsql-general

From Perry Smith
Subject Re: CASE in ORDER BY clause
Date
Msg-id 46209A9C-0B43-4F36-970B-4BA18B55619F@easesoftware.com
Whole thread Raw
In response to Re: CASE in ORDER BY clause  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: CASE in ORDER BY clause
List pgsql-general
On Jul 7, 2007, at 2:15 PM, Tom Lane wrote:

> Perry Smith <pedz@easesoftware.com> writes:
>>> On Fri, Jul 06, 2007 at 08:02:54PM +0400, Viatcheslav Kalinin wrote:
>> # select start_date from show_date
>> # order by
>> # case when start_date > CURRENT_DATE then start_date end desc,
>> # case when start_date <= CURRENT_DATE then start_date end asc;
>>
>> I am very novice, but that looks odd to me.  I would have expected
>> the asc or desc keywords need to go inside the case (before the
>> end).
>
> No, the syntax is
>     ORDER BY <expr> ASC, ...
> or
>     ORDER BY <expr> DESC, ...
>
> and in this case the expression is a CASE construct.  Viatcheslav
> is omitting an ELSE clause which means there is an implied ELSE NULL
> in each of the CASEs, and he's relying on some rules he didn't mention
> about NULLs sorting before or after all non-null values, plus the
> normal behavior of two-column sorts.
>
> The bottom line is that ASC and DESC can only appear at the top
> level of
> the ORDER BY syntax.  I have no idea what it would mean to put them
> somewhere else --- you'd have to invent semantics like mad to assign a
> meaning to that at all.

I see.  So, in effect he has:

     ORDER BY NULL DESC, start_date ASC;

or

   ORDER BY start_date DESC, NULL ASC;



pgsql-general by date:

Previous
From: Martijn van Oosterhout
Date:
Subject: Re: CASE in ORDER BY clause
Next
From: "rupesh bajaj"
Date:
Subject: Crash in PostgreSQL-8.2.4 while executing query