Почему мы должны использовать «упорядочить по» во фразе в этом термине t-sql:
row_number() over(order by column name)
Почему мы должны использовать «упорядочить по» во фразе в этом термине t-sql:
row_number() over(order by column name)
Если вы спрашиваете, почему обязательно размещать предложение ORDER BY
в OVER CLAUSE
(кроме того, что этого требует ANSI spec
), который вы можете счесть избыточным, поскольку он является дополнением к общему предложению ORDER BY
, которое будет помещено в конец запрос.
Полезность ORDER BY
в предложении OVER()
заключается в том, что вы можете пожелать чтобы применить другой ORDER BY
ко всему запросу, чем порядок, применяемый при определении столбца, сгенерированного секционированной функцией ROW_NUMBER()
. Рассмотрим следующий запрос, в котором мы хотим применить рейтинг к населению города в пределах (PARTITION BY
) города, но в алфавитном порядке по названию страны и города:
Предположим, что у City
есть (CountryName, CityName, Population)
select CountryName, CityName,
ROW_NUMBER() OVER (PARTITION BY CountryName
ORDER BY Population DESC) AS RankedPopulation
FROM City
ORDER BY CountryName, CityName;
Что может привести к такому результату:
CountryName CityName RankedPopulation
--------------- -------------- -----------------
England Liverpool 2
England London 1
France Lyons 2
France Paris 1
USA Los Angeles 2
USA Miami 3
USA New York 1
Если у вас есть несколько столбцов, спроецированных из аналитических функций, каждый из них может иметь независимый порядок в соответствующих предложениях OVER
.
Обратите внимание, что в моем примере выше RANK
будет более подходящим выбором, чем ROW_NUMBER
- Я просто хотел сохранить контекст вашего вопроса.
Row_Number на самом деле использует этот сценарий: предположим, что у нас есть эти записи (5,3,4,1,6) в номере строки, мы говорим, сколько существует элементов, что их значение меньше текущего? чтобы ответить на этот вопрос, нам нужен упорядоченный список. если нет, нам нужно выполнить итерацию по всему списку, чтобы узнать реальный счет.
Из MSDN
Определяет логический порядок строк в каждом разделе результирующего набора. То есть он определяет логический порядок, в котором выполняется вычисление оконной функции.