MySQL: как сортировать по столбцу в порядке возрастания и показывать NULL в конце, а не в начале?
Я знаю, как сортировать результирующий набор:
SELECT * FROM `People` ORDER BY `LastName` ASC
Однако результаты, которые имеют пустое LastName, показываются в начале. Как сортировать в порядке возрастания и показывать результаты NULL в конце, а не в начале?
Ответы
Ответ 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