сперва идут все записи, где some_field = NULL, отсортировано по date
- сперва идут все записи, где some_field <> NULL, отсортировано по date
Пока в голову приходит только два селекта через UNION ALL. Существует ли более элегантное решение?
есть более элегантное решение. как-то так. select date, title, some_field from sometable order by case when some_field is null then 1 when some_field is not null then 2, date
Это не пойдет, т.к. по факту это будет сортировка по some_field, а внутри повторяющихся значений по date
А какой вариант будет шустрее работать, ваш или через UNION ALL?
с union all - непонятно как вы собиратесь сделать. правка к моему селекту - забыл end добавить: select date, title, some_field from sometable order by case when some_field is null then 1 when some_field is not null then 2 end, date
( SELECT * FROM tbl WHERE some_field IS NULL ORDER BY date ) UNION ALL ( SELECT * FROM tbl WHERE some_field IS NOT NULL ORDER BY date ) Это точно по индексам побежит. Но у меня пока табличка маловата, чтобы проверить план запроса на вашем варианте.
ваш запрос не гарантирует сортированный вывод. для гарантий сортировки - надо писать order by снаружи запроса. и скобки тут лишние
Обсуждают сегодня