какой запрос является эффективным и правильным для получения результатов на основе наибольшего значения из таблицы - PullRequest
0 голосов
/ 07 мая 2018

У меня есть таблица PlayerStats, которая содержит следующие строки

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

Я написал следующие (3) запроса. который является лучшим и эффективным на сервере Sql

Query1

select * from PlayerStats order by Runs desc

Query2

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

Query3

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

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Ваш первый запрос достаточно для обработки, если вы просто хотите отсортировать все записи по прогонам

Второй и третий запросы будут более эффективными, если вы хотите отсортировать по любому конкретному разделу.

0 голосов
/ 07 мая 2018

Простота - лучшее:

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...