如何按 SQL 中的多列和不同方向进行排序。 column1
将按降序排序,而 column2
将按升序排序。
ORDER BY column1 DESC, column2
这将首先按 column1
(降序)对所有内容进行排序,然后在两行或多行的 column1
字段相等时按 column2
(升序,这是默认值)对所有内容进行排序。
其他答案缺乏一个具体的例子,所以这里是:
给定以下人员表:
FirstName | LastName | YearOfBirth
----------------------------------------
Thomas | Alva Edison | 1847
Benjamin | Franklin | 1706
Thomas | More | 1478
Thomas | Jefferson | 1826
如果您执行以下查询:
SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC
结果集将如下所示:
FirstName | LastName | YearOfBirth
----------------------------------------
Thomas | More | 1478
Thomas | Jefferson | 1826
Thomas | Alva Edison | 1847
Benjamin | Franklin | 1706
1.Firstname asc, Lastname desc, yearOfBirst asc and 2.Firstname asc, Lastname desc, yearOfBirst desc
有什么办法可以克服这个问题吗?
YearOfBirth
的重复 FirstName, LastName
条目时,您示例中的结果排序才会有所不同
SELECT *
FROM mytable
ORDER BY
column1 DESC, column2 ASC
多列排序取决于两列的对应值:这是我的表格示例,其中两列以字母和数字命名,这两列中的值是 asc 和 desc 顺序。
https://i.stack.imgur.com/agF6H.png
现在我通过执行以下命令在这两列中执行 Order By:
https://i.stack.imgur.com/sJNIz.png
现在我再次在这两列中插入新值,其中字母值按 ASC 顺序排列:
https://i.stack.imgur.com/SozWu.png
示例表中的列如下所示。现在再次执行相同的操作:
https://i.stack.imgur.com/KHveA.png
您可以看到第一列中的值是 desc 顺序,但第二列不是 ASC 顺序。
(g, 10),(g,12)
。然后,运行您的 order-by 查询,您将获得第二列作为 ASC
顺序(这意味着 g-10,g-11,g-12)
您可以在多个条件下使用多个排序,
ORDER BY
(CASE
WHEN @AlphabetBy = 2 THEN [Drug Name]
END) ASC,
CASE
WHEN @TopBy = 1 THEN [Rx Count]
WHEN @TopBy = 2 THEN [Cost]
WHEN @TopBy = 3 THEN [Revenue]
END DESC
SELECT id,
first_name,
last_name,
salary
FROM employee
ORDER BY salary DESC, last_name;
如果您想从表中选择记录,但希望看到它们根据两列排序,您可以使用 ORDER BY 来实现。此子句出现在 SQL 查询的末尾。
在 ORDER BY 关键字之后,添加您希望首先对记录进行排序的列的名称(在我们的示例中为薪水)。然后,在逗号之后,添加第二列(在我们的示例中,last_name)。您可以分别修改每列的排序顺序(升序或降序)。如果要使用升序(从低到高)排序,可以使用 ASC 关键字;但是,此关键字是可选的,因为这是未指定时的默认顺序。如果要使用降序,请将 DESC 关键字放在相应的列之后(在示例中,我们对薪水列使用降序)。
您还可以按要排序的每列中的字符数进行排序或排序。下面显示的示例按名字的前三个字符和城镇名称的后两个字符排序。
SELECT *
FROM table_name
ORDER BY LEFT(FirstName, 3) ASC, LEFT(Town, 2);
https://i.stack.imgur.com/tOBuu.png
SELECT * 从 EMP ORDER BY DEPTNO ASC, JOB DESC;
column1
字段相等,就会先按column1
对所有内容进行排序,然后再按column2
对所有内容进行排序。column2
排序,然后按column1
执行 STABLE 排序。这对于知道什么是稳定排序的人来说更清楚。