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

MySQL: как сортировать по столбцу в порядке возрастания и показывать NULL в конце, а не в начале?

Я знаю, как сортировать результирующий набор:

SELECT * FROM `People` ORDER BY `LastName` ASC

Однако результаты, которые имеют пустое LastName, показываются в начале. Как сортировать в порядке возрастания и показывать результаты NULL в конце, а не в начале?

4b9b3361

Ответ 1

SELECT
    *
FROM
    People
ORDER BY
    CASE WHEN LastName IS NULL THEN 1 ELSE 0 END,
    LastName

Вы также можете просто использовать

SELECT
    *
FROM
    People
ORDER BY
    COALESCE(LastName, 'ZZZZZ')

Технически, вторая версия потерпит неудачу, если у человека действительно есть LastName в вашей БД "ZZZZZZ".

ПРИМЕЧАНИЕ. Я уверен, что это просто потому, что вы приводите пример, но я надеюсь, что вы не используете SELECT * в фактическом производственном коде...:)

Ответ 2

  SELECT *, LastName IS NULL AS nullity 
    FROM `People` 
ORDER BY nullity ASC, `LastName` ASC

Ответ 3

SELECT * 
FROM `People` 
ORDER BY case when `LastName` is null then 1 else 0 end, 
    `LastName`

Ответ 4

это должно сделать это для вас

select *, if(isnull(name), 1, 0) as is_name_null 
from names 
order by is_name_null asc, name asc