如何在SQL和不同方向上按多个列排序。column1将按降序排序,column2按升序排序。
column1
column2
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
多列排序取决于两列的对应值:这是我的表格示例,其中有两列以字母和数字命名,这两列中的值是asc和desc顺序。
现在我通过执行以下命令在这两列中执行按订单:
现在我再次在这两列中插入新值,其中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);
从EMPDEPTNO ASC, JOB DESC的订单中选择*;
尝试
'select * FROM users ORDER BY id DESC, name ASC, age DESC