Ответ 1
Не красиво, но должно работать:
... order by (case when f1 then 1 when f1 is null then 2 else 3 end) asc
Моя таблица имеет три логических поля: f1, f2, f3. Если я делаю
SELECT * FROM table ORDER BY f1, f2, f3
записи будут отсортированы по этим полям в порядке false, true, null. Я хочу заказать их с нулевым значением между true и false: правильный порядок должен быть true, null, false.
Я использую PostgreSQL.
Не красиво, но должно работать:
... order by (case when f1 then 1 when f1 is null then 2 else 3 end) asc
Лучшим решением было бы использовать
f1 DESC NULLS LAST
если вы в порядке с порядком true, false, nil (я думаю, важная часть вашего вопроса была, как и в моей ситуации, иметь не верные ваулы вместе)
вы можете сделать следующее:
order by coalesce(f1, FALSE), coalesce(f1, TRUE), ...
Если f1
- TRUE
, вы получаете: TRUE, TRUE
Если f1
NULL
, вы получаете: FALSE, TRUE
Если f1
FALSE
, вы получаете: FALSE, FALSE
который соответствует упорядоченному порядку сортировки.