Skip to content

SQLite - ORDER BY 子句

SQLite - 使用 ORDER BY 对查询结果排序

Section titled “SQLite - 使用 ORDER BY 对查询结果排序”

ORDER BY 子句用于 SELECT 语句中,根据一个或多个列的值对结果集进行排序。您可以按升序或降序对数据进行排序。

SELECT column_list
FROM table_name
[WHERE condition]
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;
  • ASC:按升序(从小到大)对结果进行排序。如果未指定顺序,这是默认行为。
  • DESC:按降序(从大到小)对结果进行排序。

让我们按 SALARY 降序对 COMPANY 表进行排序,以首先查看薪水最高的员工。

SELECT NAME, SALARY FROM COMPANY ORDER BY SALARY DESC;

这将产生以下结果:

NAME SALARY
---------- ----------
David 85000.0
Mark 65000.0
Kim 45000.0
Paul 20000.0
Teddy 20000.0
Allen 15000.0
James 10000.0

您可以按多个列进行排序。结果集首先按第一列排序,然后,对于第一列中具有相同值的任何行,它们会按第二列排序,依此类推。让我们按 AGE(升序)排序,然后对于相同年龄的员工按 NAME(字母顺序)排序。

SELECT NAME, AGE FROM COMPANY ORDER BY AGE ASC, NAME ASC;

注意 Mark 和 Allen(都 25 岁)现在是如何按姓名字母顺序排序的。

NAME AGE
---------- ----------
Kim 22
Teddy 23
James 24
Allen 25
Mark 25
David 27
Paul 32

默认情况下,NULL 值被认为小于任何其他值。这意味着它们在 ASC 排序中显示在最前面,在 DESC 排序中显示在最后面。您可以使用 NULLS FIRST 或 NULLS LAST 覆盖此行为。

假设我们的 SALARY 列可能包含 NULL 值。若要首先列出已知薪水的员工(降序),然后是未知薪水的员工,您可以使用:

-- 假设某些员工的 SALARY 为 NULL
SELECT NAME, SALARY FROM COMPANY ORDER BY SALARY DESC NULLS LAST;

您不仅限于按列排序。您还可以按表达式的结果进行排序。例如,让我们找出薪资年龄比最高的员工。

SELECT NAME, SALARY, AGE, (SALARY / AGE) AS RATIO
FROM COMPANY
ORDER BY RATIO DESC;

这个强大的功能允许直接在您的 SQL 查询中实现复杂的排序逻辑。