#sql #postgresql #sql-order-by #case
#sql #postgresql #sql-order-by #случай
Вопрос:
У меня есть следующая таблица «клиент»
ID|name|filecount
----------------------
1 Jim 7
2 Jane null
3 Mike 18
4 Jeff 12
5 Ann null
6 Helen 22
Я хочу извлечь все строки из этой таблицы ordered by ID Desc
с нулями в столбце, filecount
упорядоченном последним.
Итак, после сортировки я хотел бы получить следующий порядок:
ID|name |filecount
----------------------
6 Helen 22
4 Jeff 12
3 Mike 18
1 Jim 7
5 Ann null
2 Jane null
Я пробовал следующее, но это не работает:
Select * from client order by id desc, (filecount > 0) nulls last
Ответ №1:
Я бы использовал здесь CASE
выражение:
SELECT *
FROM client
ORDER BY
CASE WHEN filecount IS NOT NULL THEN 0 ELSE 1 END,
ID DESC;
ДЕМОНСТРАЦИЯ
Ответ №2:
Вы можете сортировать по filecount
сначала с различием только между значениями 0 и не 0, а затем по ID
:
select *
from client
order by case
when filecount <> 0 then 0
else 1
end, ID desc
PS: Это не null
s, это нули. Если они должны быть null
s, измените эту строку:
when filecount <> 0 then 0
Для:
when filecount is not null then 0
Комментарии:
1. Да, это была ошибка, они должны быть нулевыми. Я исправил вопрос.