Re: ORDER BY
От | John Sidney-Woollett |
---|---|
Тема | Re: ORDER BY |
Дата | |
Msg-id | 455C089C.50202@wardbrook.com обсуждение исходный текст |
Ответ на | Re: ORDER BY ("George Pavlov" <gpavlov@mynewplace.com>) |
Список | pgsql-general |
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
В списке pgsql-general по дате отправления: