Как упорядочить результат запроса по двум столбцам с последними значениями null в одном из столбцов

#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. Да, это была ошибка, они должны быть нулевыми. Я исправил вопрос.