今天遇到了一个需求,需要根据一个字段的值正序来排序,但空值要排在最后。
SELECT * FROM some_schema ORDER BY some_field;
当这个字段全部有值的时候,排序是可以正常使用的。
如果这个字段出现Null值的时候,这样的写法就会把Null值排在最前面。
其实这个解决思路就是先排序Null值,然后再根据字段的排序规则来排即可解决问题。
SELECT * FROM some_schema ORDER BY some_field IS NULL, some_field ASC;
SELECT * FROM some_schema ORDER BY ISNULL(some_field), some_field;
Mysql有个官方文档里没有说出的语法,可以把null结果排到最后:把-号(负号)放到要排序的列名前,并把asc替换为desc
SELECT * FROM some_schema ORDER BY -some_field DESC;
其实还可以通过CASE WHEN
和IF
控制语句来做,但没必要。
基于Nginx+Supervisord+uWSGI+Django1.11.1+Python3.6.5构建