首页 > 解决方案 > 哪个查询有效且正确,可以根据表中的最高值获取结果

问题描述

我有一个表“PlayerStats”,其中包含以下行

Id Runs  HS
 1 536   96
 2 586   98
 3 423   82

我写了以下(3)个查询。这是Sql server中最好最高效的

查询1

select * from PlayerStats order by Runs desc

查询2

 SELECT *
     FROM
     (SELECT Runs,HS,DENSE_RANK() over(ORDER BY Runs desc) AS rk 
     FROM PlayerStats) as a

查询3

With empCTE2 as
(
   SELECT Runs,HS,DENSE_RANK() over(ORDER BY Runs desc) as _rank from PlayerStats
)
select * from empCTE2

标签: sqlsql-servertsql

解决方案


简单是最好的:

select * from PlayerStats order by Runs desc;
-- you should avoid using `*` and you should expand column list to match 
-- 2nd and 3rd

如果您只需要对结果集进行排序,则使用第一种方法。

第二个和第三个(子查询/CTE)查询实际上是相同的,所以它们之间不应该有任何区别。但有一个警告:

SELECT *
FROM(SELECT Runs,HS,DENSE_RANK() over(ORDER BY Runs desc) AS rk 
    FROM PlayerStats) as a
-- there is no ORDER BY on the most outerquery, so the order is not guaranteed 

推荐阅读