我正在寻找一种方法,在SQL中对DESC或ASC进行排序时最后返回NULL 值(包络代码在 Python 中(,并且也许能够根据某些配置首先重新调整 NULL 值
我尝试用数值替换 NULL 值,但从长远来看,我发现这不是一个合适的解决方案,因为在某些情况下我需要追溯 NULL 的来源,为什么我有它并放置一个数值可能会影响其他人的工作并给出不准确的结果。
if request.sort:
sql += " order by " + ', '.join([sort.split(':')[0] + " " + sort.split(':')[1] for sort in request.sort])
return sql
如果仅按语法顺序进行替换,则仍可以使用 null 的数字替换并保留原始值。生成的 SQL 如下所示:
SELECT col1, col2, col3
FROM Table
ORDER BY COALESCE(col1, -99)
还找到了一个很好的参考,用于使用空值进行排序。
在过滤数据之间使用union all
实现的另一种方法
.... from table_name where column is not null order by column <desc/asc>
UNION ALL
.... from table_name where column is null
你可以尝试这样的事情:
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
如果要在顶部获取 null,请使用如下所示的 case 语句进行排序:
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