Как обрабатывать значения NULL при сортировке? - PullRequest
0 голосов
/ 31 мая 2019

Я ищу способ вернуть значения NULL последними при сортировке либо DESC, либо ASC в SQL (код преобразования находится в Python) и, возможно, сможет сначала перенастроить значения NULL в зависимости от конфигурации

Я пытался заменить значения NULL на числовые значения, но в долгосрочной перспективе я обнаружил, что это не подходящее решение, так как в некоторых случаях мне нужно отследить происхождение значения NULL, почему он у меня есть, и установка числового значения может привести к влиять на чужую работу и давать неточные результаты.

if request.sort:
    sql += " order by " + ', '.join([sort.split(':')[0] + " " + sort.split(':')[1] for sort in request.sort])

return sql

Ответы [ 3 ]

1 голос
/ 31 мая 2019

Вы по-прежнему можете использовать числовую замену нулей и сохранить исходные значения, если вы выполняете замену только в порядке по синтаксису.Результирующий SQL будет выглядеть так:

SELECT col1, col2, col3
FROM Table
ORDER BY COALESCE(col1, -99)

Также найдена хорошая ссылка для сортировки с нулями.

0 голосов
/ 31 мая 2019

В качестве альтернативы вашей реализации используйте union all между отфильтрованными данными

.... from table_name where column is not null order by column <desc/asc>
UNION ALL
.... from table_name where column is null
0 голосов
/ 31 мая 2019

Вы можете попробовать что-то вроде этого:

create table test(col1 varchar(10),col2 float)

insert into test
values('A',1),
('C',2),
('D',null),
('F',4)

вместо сортировки следующим образом:

select * from test order by col2 desc
select * from test order by col2 asc

сортировать, используя оператор case, как показано ниже, если вы хотите получить значение NULL вtop:

select * from test order by case when col2 is null then 0 else 1 end, col2 desc
select * from test order by case when col2 is null then 0 else 1 end, col2 asc

, чтобы получить ноль внизу:

select * from test order by case when col2 is null then 0 else 1 end desc, col2 desc
select * from test order by case when col2 is null then 0 else 1 end desc, col2 asc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...