Search Postgresql Archives

Re: ORDER BY

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

 



Alternative options for what they're worth - you'd have to explain to see how efficient they are

select id, name from (
  select lower(name) as sortkey, id, name from table where name != 'Other'
  union
  select 'zzzzz' as sortkey, id, name from table where name = 'Other'
) as t
order by sortkey


select id, name from (
select case when name='Other' then 'zzzzz' else lower(name) end as sortkey, id, name from table

) as t
order by sortkey

Notice that the sort will be case insensitive in these examples which may be something that you also want.

John

George Pavlov wrote:
For larger tables, you may have to resort to a union:

   select * from foo where name != 'Other' order by name
   union
   select * from foo where name = 'Other'

Alas, this suggestion is wrong on two counts: (a) UNION expects a single
ORDER BY that applies to the whole recordset and which has to come at
the end; (b) UNION re-sorts anyway (it needs to eliminate the dupes) --
maybe you are thinking UNION ALL? So, to follow your advice he may want
a query like this, although it seems quite silly and there still isn't
an ironclad guarantee re. the final result sorting:

select * from (select * from foo where name != 'Other' order by name) x
union all
select * from foo where name = 'Other'

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match


[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