Каково упорядочение набора результатов при использовании оконных функций, которые имеют компоненты order by? - PullRequest
3 голосов
/ 07 февраля 2012

Я работаю над запросом к SEDE:

select top 20 
  row_number() over(order by "percentage approved" desc, approved desc), 
  row_number() over(order by "total edits" asc), 
  *
from editors 
where "total edits" > 30

Каков порядок набора результатов с учетом двух оконных функций?

Я подозреваю, что он не определен, но не смог найти окончательного ответа.OTOH, результаты запросов с одной такой оконной функцией были упорядочены в соответствии с предложением over(order by ...).

Ответы [ 2 ]

5 голосов
/ 07 февраля 2012

Результаты могут быть возвращены в любом порядке.

Теперь они часто будут возвращаться в том же порядке, который указан в предложении OVER, но это только потому, что SQL Server может выбрать план запроса, который сортирует строки для вычисления агрегата. Это ни в коем случае не гарантируется, так как в любой момент можно выбрать другой план запроса, особенно если вы усложняете запрос, что расширяет пространство возможных планов запроса.

5 голосов
/ 07 февраля 2012

Результирующий набор ЛЮБОЙ Запрос SQL Server, который не имеет явного ORDER BY, не определен.

Сюда относится, когда у вас есть оконные функции в запросе или ORDER BY в подзапросе. Порядок результата будет зависеть от множества факторов, ни один из которых не гарантирован, если вы не укажете ORDER BY.

...