SQL多列排序

如何在SQL和不同方向上按多个列排序。column1将按降序排序,column2按升序排序。

1186557 次浏览
ORDER BY column1 DESC, column2

这将首先按column1(降序)对所有内容进行排序,然后在两行或多行的column1字段相等时按column2(升序,这是默认值)对所有内容进行排序。

SELECT  *FROM    mytableORDER BYcolumn1 DESC, column2 ASC

其他答案缺乏具体的例子,所以在这里:

给定以下人们表:

 FirstName |  LastName   |  YearOfBirth----------------------------------------Thomas   | Alva Edison |   1847Benjamin | Franklin    |   1706Thomas   | More        |   1478Thomas   | Jefferson   |   1826

如果您执行以下查询:

SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC

结果集如下所示:

 FirstName |  LastName   |  YearOfBirth----------------------------------------Thomas   | More        |   1478Thomas   | Jefferson   |   1826Thomas   | Alva Edison |   1847Benjamin | Franklin    |   1706

多列排序取决于两列的对应值:这是我的表格示例,其中有两列以字母和数字命名,这两列中的值是ascdesc顺序。

在此处输入图片描述

现在我通过执行以下命令在这两列中执行按订单

在此处输入图片描述

现在我再次在这两列中插入新值,其中Alphabet值按ASC顺序排列:

在此处输入图片描述

和示例表中的列如下所示。现在再次执行相同的操作:

在此处输入图片描述

您可以看到第一列中的值是按desc顺序排列的,但第二列不是按ASC顺序排列的。

您可以在多个条件下使用多个排序,

ORDER BY(CASEWHEN @AlphabetBy = 2  THEN [Drug Name]END) ASC,CASEWHEN @TopBy = 1  THEN [Rx Count]WHEN @TopBy = 2  THEN [Cost]WHEN @TopBy = 3  THEN [Revenue]END DESC
SELECT id,first_name,last_name,salaryFROM employeeORDER BY salary DESC, last_name;

如果您想从表中选择记录,但希望看到它们根据两列排序,您可以使用ORDER BY这样做。此子句位于SQL查询的末尾。

在ORDER BY关键字之后,添加您希望首先对记录进行排序的列的名称(在我们的示例中是工资)。然后,在逗号之后,添加第二列(在我们的示例中是last_name)。您可以分别修改每列的排序顺序(升序或降序)。如果您想使用升序(从低到高),您可以使用ASC关键字;但是,此关键字是可选的,因为这是未指定时的默认顺序。如果您想使用降序,请将DESC关键字放在适当的列之后(在示例中,我们对工资列使用降序)。

您还可以在您希望排序的每个列中按字符数进行排序或排序。下面显示的是一个示例,它按名字的前三个字符和城镇名称的最后两个字符进行排序。

SELECT *FROM table_nameORDER BY LEFT(FirstName, 3) ASC, LEFT(Town, 2);

通过Intellij DataGrip编译

从EMPDEPTNO ASC, JOB DESC的订单中选择*;

尝试

'select * FROM users ORDER BY id DESC, name ASC, age DESC