乐闻世界logo
搜索文章和话题

如何在SQLite中实现NULLS LAST?

4 个月前提问
4 个月前修改
浏览次数18

1个答案

1

在SQLite中,实现NULLS LAST的功能可以通过在ORDER BY子句中使用CASE语句来间接完成。SQLite默认的排序行为是将NULL值视为最小值,因此它们会在使用ASC(升序)排序时出现在前面,使用DESC(降序)排序时出现在后面。如果您希望在升序排序时让NULL值出现在最后,您需要自定义排序逻辑。

示例:

假设我们有一个叫做employees的表,其中包含namesalary两个字段,我们想按salary进行升序排序,但希望NULL值出现在所有非NULL值之后。

sql
SELECT name, salary FROM employees ORDER BY CASE WHEN salary IS NULL THEN 1 ELSE 0 END, -- First order by this expression to push NULLs to the end salary ASC; -- Then order by salary

在这个例子中,CASE语句生成一个新的列用于排序。当salaryNULL时,这个表达式返回1,否则返回0。因此,所有非NULLsalary值(产生0)会排在NULL值(产生1)之前。随后,对于那些非NULL的值,会依据实际的salary值进行升序排序。

使用这种方法,即使SQLite本身不直接支持NULLS LAST语法,您仍然可以实现类似的效果。

2024年7月21日 20:44 回复

你的答案