如何在SQL中按多个列和不同的方向进行排序?例如,'column1'将以降序排序,而'column2'将以升序排序。
如何在SQL中按多个列和不同的方向进行排序?例如,'column1'将以降序排序,而'column2'将以升序排序。
ORDER BY column1 DESC, column2
首先按照column1
(降序)排序,然后每当两行或更多行的column1
字段相同时,默认情况下按照column2
(升序)排序。
column1
对所有内容进行排序,然后在column1
值相等的两行中,按column2
进行排序。 - Nick Benescolumn2
进行排序,然后通过column1
进行稳定排序。对于了解什么是稳定排序的人来说更清晰明了。 - Atom FirstName | LastName | YearOfBirth
----------------------------------------
Thomas | Alva Edison | 1847
Benjamin | Franklin | 1706
Thomas | More | 1478
Thomas | Jefferson | 1826
如果您执行以下查询: If you execute the query below:
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.名字升序,姓氏降序,出生年份升序和2.名字升序,姓氏降序,出生年份降序
有没有办法克服这个问题? - Paramesh KorrakutiYearOfBirth
和重复的FirstName, LastName
条目,您示例中的排序将不同。 - Thomas C. G. de VilhenaSELECT *
FROM mytable
ORDER BY
column1 DESC, column2 ASC
你可以在多个条件上使用多重排序。
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;
尝试
'select * FROM users ORDER BY id DESC, name ASC, age DESC
您还可以按照每个要排序的列中的字符数进行排序或排序。下面是一个示例,它按照名字的前三个字符和城镇名称的后两个字符进行排序。
SELECT *
FROM table_name
ORDER BY LEFT(FirstName, 3) ASC, LEFT(Town, 2);
FirstName
和Town
索引将不会被使用。更多信息请参阅https://planetscale.com/courses/mysql-for-developers/queries/index-obfuscation。 - Can Rau