SQL 查询根据两列对日期进行排序
SQL Query to sort date based on two column
我在 table RATING
中有以下数据,我想根据评级和年份对其进行排序。
数据库 MS SQL 服务器
Table
中的未排序数据
ID PlayerName Rating Year
1 A 8 2022
2 B 8 2022
3 C 0 2022
4 A 7 2020
5 B 6 2020
6 C 6 2020
7 E 5 2020
8 D 5 2020
9 D 5 2022
数据应如下所示
ID PlayerName Rating Year
1 A 8 2022
2 B 8 2022
3 D 5 2022
9 C 0 2022
4 A 7 2020
5 B 6 2020
6 C 6 2020
7 E 5 2020
8 D 5 2020
我无法正确使用以下查询
SELECT ID, PlayerName, Rating, Year
FROM RATING
Where Year IN (SELECT Year from Rating)
order by year DESC
但它没有得到正确的顺序,因为我无法在子查询中使用 order by 子句,因为它会生成错误 The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.
事件两列排序不正常
SELECT ID, PlayerName, Rating, Year
FROM RATING
order by Rating, Year
您可以尝试先 ORDER BY
年 DESC 然后 Rating
DESC
SELECT ID, PlayerName, Rating, [Year]
FROM RATING
order by [Year] DESC,Rating DESC
Year
是sqlserver中的关键字,我会用括号括起来。
到目前为止你的尝试还不错。但是有两件事你需要改变。
第一:排序优先级较高的列是“年份”列,因此必须首先使用它,然后是“评级”列。
第二:必须加上关键字“DESC”,以最新的年份和最高的排名开头。
所以你的查询应该是这个:
SELECT * FROM rating ORDER BY year DESC, rating DESC;
你可以看到它在这里工作:db<>fiddle
如果您可以重命名数据库中的列,我建议不要使用 SQL 关键字作为列名(在您的示例中,这是“年”列)并且不要使用列名与 table 名称相同(在您的情况下,您可以将 table“rating”重命名为“ratings”或类似名称)。
这两者当然都是可能的,但有时可能会不好读,并增加出现问题的风险。
我在 table RATING
中有以下数据,我想根据评级和年份对其进行排序。
数据库 MS SQL 服务器
Table
中的未排序数据ID PlayerName Rating Year
1 A 8 2022
2 B 8 2022
3 C 0 2022
4 A 7 2020
5 B 6 2020
6 C 6 2020
7 E 5 2020
8 D 5 2020
9 D 5 2022
数据应如下所示
ID PlayerName Rating Year
1 A 8 2022
2 B 8 2022
3 D 5 2022
9 C 0 2022
4 A 7 2020
5 B 6 2020
6 C 6 2020
7 E 5 2020
8 D 5 2020
我无法正确使用以下查询
SELECT ID, PlayerName, Rating, Year
FROM RATING
Where Year IN (SELECT Year from Rating)
order by year DESC
但它没有得到正确的顺序,因为我无法在子查询中使用 order by 子句,因为它会生成错误 The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.
事件两列排序不正常
SELECT ID, PlayerName, Rating, Year
FROM RATING
order by Rating, Year
您可以尝试先 ORDER BY
年 DESC 然后 Rating
DESC
SELECT ID, PlayerName, Rating, [Year]
FROM RATING
order by [Year] DESC,Rating DESC
Year
是sqlserver中的关键字,我会用括号括起来。
到目前为止你的尝试还不错。但是有两件事你需要改变。 第一:排序优先级较高的列是“年份”列,因此必须首先使用它,然后是“评级”列。 第二:必须加上关键字“DESC”,以最新的年份和最高的排名开头。 所以你的查询应该是这个:
SELECT * FROM rating ORDER BY year DESC, rating DESC;
你可以看到它在这里工作:db<>fiddle
如果您可以重命名数据库中的列,我建议不要使用 SQL 关键字作为列名(在您的示例中,这是“年”列)并且不要使用列名与 table 名称相同(在您的情况下,您可以将 table“rating”重命名为“ratings”或类似名称)。 这两者当然都是可能的,但有时可能会不好读,并增加出现问题的风险。