Подтвердить что ты не робот

SQL для сортировки логического столбца как true, null, false

Моя таблица имеет три логических поля: f1, f2, f3. Если я делаю

SELECT * FROM table ORDER BY f1, f2, f3

записи будут отсортированы по этим полям в порядке false, true, null. Я хочу заказать их с нулевым значением между true и false: правильный порядок должен быть true, null, false.

Я использую PostgreSQL.

4b9b3361

Ответ 1

Не красиво, но должно работать:

   ... order by (case when f1 then 1 when f1 is null then 2 else 3 end) asc

Ответ 2

Лучшим решением было бы использовать

f1 DESC NULLS LAST

если вы в порядке с порядком true, false, nil (я думаю, важная часть вашего вопроса была, как и в моей ситуации, иметь не верные ваулы вместе)

fooobar.com/questions/154669/...

Ответ 3

вы можете сделать следующее:

order by coalesce(f1, FALSE), coalesce(f1, TRUE), ...

Если f1 - TRUE, вы получаете: TRUE, TRUE
Если f1 NULL, вы получаете: FALSE, TRUE
Если f1 FALSE, вы получаете: FALSE, FALSE

который соответствует упорядоченному порядку сортировки.