Row_number (transact-sql)row_number (transact-sql)
Содержание:
- Функция NTILE
- В.C. Использование четырех ранжирующих функций в одном запросеFour ranking functions used in the same query
- BeispieleExamples
- АргументыArguments
- ArgumentosArguments
- PARTITION BY и LAG, LEAD и RANK
- Ejemplos: Azure Synapse AnalyticsAzure Synapse Analytics y Almacenamiento de datos paralelosParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Almacenamiento de datos paralelosParallel Data Warehouse
- Виды функций
- MySQL ROW_NUMBER() syntax
- SQL ROW_NUMBER() Function Overview
- Allgemeine HinweiseGeneral Remarks
- Какой контент использовать
- ExemplosExamples
- Esempi: Azure Synapse AnalyticsAzure Synapse Analytics e Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Parallel Data WarehouseParallel Data Warehouse
- ПримерыExamples
- Где скачать
Функция NTILE
Эта функция позволяет разбивать строки в секции окна на примерно равные по размеру подгруппы (tiles) в соответствии с заданным числом подгрупп и упорядочением окна. Допустим, что нужно разбить строки представления OrderValues на 10 подгрупп одинакового размера на основе упорядочения по val. В представлении 830 строк, поэтому требуется 10 подгрупп, размер каждой будет составлять 83 (830 деленное на 10). Поэтому первым 83 строкам (одной десятой части), упорядоченным по val, будет назначен номер группы 1, следующим 83 строкам — номер подгруппы 2 и т. д. Вот запрос, вычисляющий номера как строк, так и подгрупп:
Если вы думаете, что разбиение на подгруппы похоже на разбиение на страницы, хочу вас предупредить, что не стоит их путать. При разбиении на страницы, размер страницы является константой, а число страниц меняется динамически — оно определяется делением числа строк в результате запроса на размер страницы. При разбиении на подгруппы число подгрупп является константой, а размер подгруппы меняется и определяется как число строк деленное на заданное число подгрупп. Ясно, для чего нужно разбиение на страницы, а разбиение на подгруппы обычно используется для аналитических задач — когда нужно распределить данные среди заданного числа равных по размеру сегментов с использованием упорядочения по определенному измерению.
Но вернемся к результату запроса, вычисляющего номера как строк, так и подгрупп: как видите они тесно связаны друг с другом. По сути, можно считать, что номер подгруппы вычисляется на основе номера строки. В предыдущем разделе мы говорили, что если упорядочение окна не является уникальным, функция ROW_NUMBER является недетерминистической. Если разбиение на подгруппы принципиально основано на номерах строк, то это означает, что вычисление NTILE также недетерминистично, если упорядочение окна не уникально. Это означает, что у данного запроса может быть несколько правильных результатов. Можно посмотреть на это с другой стороны: двум строкам с одним значением упорядочения могут быть назначены разные номера подгрупп. Если нужен гарантированный детерминизм, можно следовать моим рекомендациям по получению детерминистических номеров строк, а именно добавить в упорядочение окна дополнительный параметр:
Теперь у запроса только один правильный результат. Ранее, при описании функции NTILE я пояснил, что она позволяет разбить строки в секции окна на примерно равные подгруппы. Я использовал слово «примерно», потому что число строк, полученное в базовом запросе, может не делиться нацело на число подгрупп. Допустим, вы хотите разбить строки представления OrderValues на 100 подгрупп. При делении 830 на 100 получаем частное 8 и остаток 30. Это означает, что базовая размерность подгрупп будет 8, но часть подгрупп получать дополнительную строку. Функция NTILE не пытается распределять дополнительные строки среди подгрупп с равным расстоянием между подгруппами — она просто добавляет по одному ряду в первые подгруппы, пока не распределит остаток. При наличии остатка 30 размерность первых 30 подгрупп будет на единицу больше базовой размерности. Поэтому первые 30 будут содержать 9 рядов, а последние 70 — 8, как показано в следующем запросе:
Следуя привычному методу, попытаемся создать альтернативные решения, заменяющие функцию NTILE и не содержащие оконных функций.
Я покажу один способ решения задачи. Для начала, вот код, который вычисляет число подгрупп по заданным размерности, числу подгрупп и числу строк:
Вычисление вполне очевидно. Для входных данных код возвращает 5 в качестве числа подгрупп.
Затем применим эту процедуру к строкам представления OrderValues. Используйте агрегат COUNT, чтобы получить размерность результирующего набора, а не входные данные @cnt, а также примените описанную ранее логику для вычисления номеров строк без использования оконных функций вместо входных данных @rownum:
Как обычно, не пытайтесь повторить это в производственной среде! Это пример предназначен для обучения, а его производительность в SQL Server ужасна по сравнению с функцией NTILE.
В.C. Использование четырех ранжирующих функций в одном запросеFour ranking functions used in the same query
В этом примере демонстрируются четыре функции ранжирования:This example shows the four ranking functions
- DENSE_RANK()DENSE_RANK()
- NTILE()NTILE()
- RANK()RANK()
- ROW_NUMBER()ROW_NUMBER()
Они используются в одном запросе.used in the same query. См. конкретные примеры по каждой ранжирующей функции.See each ranking function for function-specific examples.
Результирующий набор:Here is the result set.
FirstNameFirstName | LastNameLastName | Row NumberRow Number | RankRank | Dense RankDense Rank | QuartileQuartile | SalesYTDSalesYTD | PostalCodePostalCode |
---|---|---|---|---|---|---|---|
MichaelMichael | BlytheBlythe | 11 | 11 | 11 | 11 | 4557045,04594557045.0459 | 9802798027 |
LindaLinda | MitchellMitchell | 22 | 11 | 11 | 11 | 5200475,23135200475.2313 | 9802798027 |
JillianJillian | CarsonCarson | 33 | 11 | 11 | 11 | 3857163,63323857163.6332 | 9802798027 |
GarrettGarrett | VargasVargas | 44 | 11 | 11 | 11 | 1764938,98591764938.9859 | 9802798027 |
TsviTsvi | ReiterReiter | 55 | 11 | 11 | 22 | 2811012,71512811012.7151 | 9802798027 |
ShuShu | ItoIto | 66 | 66 | 22 | 22 | 3018725,48583018725.4858 | 9805598055 |
JosйJosé | SaraivaSaraiva | 77 | 66 | 22 | 22 | 3189356,24653189356.2465 | 9805598055 |
DavidDavid | CampbellCampbell | 88 | 66 | 22 | 33 | 3587378,42573587378.4257 | 9805598055 |
TeteTete | Mensa-AnnanMensa-Annan | 99 | 66 | 22 | 33 | 1931620,18351931620.1835 | 9805598055 |
LynnLynn | TsofliasTsoflias | 1010 | 66 | 22 | 33 | 1758385,9261758385.926 | 9805598055 |
RachelRachel | ValdezValdez | 1111 | 66 | 22 | 44 | 2241204,04242241204.0424 | 9805598055 |
JaeJae | PakPak | 1212 | 66 | 22 | 44 | 5015682,37525015682.3752 | 9805598055 |
RanjitRanjit | Varkey ChudukatilVarkey Chudukatil | 1313 | 66 | 22 | 44 | 3827950,2383827950.238 | 9805598055 |
BeispieleExamples
A.A. Einfache BeispieleSimple examples
Die folgende Abfrage gibt vier Systemtabellen in alphabetischer Reihenfolge zurück.The following query returns the four system tables in alphabetic order.
Hier ist das Resultset.Here is the result set.
namename | recovery_model_descrecovery_model_desc |
---|---|
mastermaster | SIMPLESIMPLE |
modelmodel | FULLFULL |
msdbmsdb | SIMPLESIMPLE |
tempdbtempdb | SIMPLESIMPLE |
Fügen Sie mit der -Funktion eine Spalte namens (in diesem Fall) hinzu, um eine Spalte für Zeilennummern vor jeder Zeile hinzuzufügen.To add a row number column in front of each row, add a column with the function, in this case named . Sie müssen die -Klausel bis zur -Klausel verschieben.You must move the clause up to the clause.
Hier ist das Resultset.Here is the result set.
Row#Row# | namename | recovery_model_descrecovery_model_desc |
---|---|---|
11 | mastermaster | SIMPLESIMPLE |
22 | modelmodel | FULLFULL |
33 | msdbmsdb | SIMPLESIMPLE |
44 | tempdbtempdb | SIMPLESIMPLE |
Durch das Hinzufügen einer -Klausel zur -Spalte wird die Nummerierung neu gestartet, wenn der -Wert sich verändert.Adding a clause on the column, will restart the numbering when the value changes.
Hier ist das Resultset.Here is the result set.
Row#Row# | namename | recovery_model_descrecovery_model_desc |
---|---|---|
11 | modelmodel | FULLFULL |
11 | mastermaster | SIMPLESIMPLE |
22 | msdbmsdb | SIMPLESIMPLE |
33 | tempdbtempdb | SIMPLESIMPLE |
Im folgenden Beispiel wird eine Zeilennummer für die Vertriebsmitarbeiter in Adventure Works CyclesAdventure Works Cycles auf Grundlage der Verkaufszahlen des laufenden Jahres berechnet.The following example calculates a row number for the salespeople in Adventure Works CyclesAdventure Works Cycles based on their year-to-date sales ranking.
Hier ist das Resultset.Here is the result set.
C.C. Zurückgeben einer Teilmenge von ZeilenReturning a subset of rows
Im folgenden Beispiel werden Zeilennummern für alle Zeilen in der -Tabelle in der Reihenfolge des berechnet und nur die Zeilen bis (einschließlich) zurückgegeben.The following example calculates row numbers for all rows in the table in the order of the and returns only rows to inclusive.
D:D. Verwenden von ROW_NUMBER () mit PARTITIONUsing ROW_NUMBER() with PARTITION
Im folgenden Beispiel wird das Argument zum Partitionieren des Abfrageresultset nach der Spalte verwendet.The following example uses the argument to partition the query result set by the column . Durch die -Klausel in der -Klausel werden die Zeilen in jeder Partition nach der Spalte sortiert.The clause specified in the clause orders the rows in each partition by the column . Die -Klausel in der -Anweisung sortiert das gesamte Abfrageresultset nach .The clause in the statement orders the entire query result set by .
Hier ist das Resultset.Here is the result set.
АргументыArguments
PARTITION BY value_expressionPARTITION BY value_expressionДелит результирующий набор, полученный от предложения FROM, на секции, к которым применяется функция ROW_NUMBER.Divides the result set produced by the FROM clause into partitions to which the ROW_NUMBER function is applied. value_expression определяет столбец, по которому секционируется результирующий набор.value_expression specifies the column by which the result set is partitioned. Если параметр не указан, функция обрабатывает все строки результирующего набора запроса как одну группу.If is not specified, the function treats all rows of the query result set as a single group. Дополнительные сведения см. в статье Предложение OVER (Transact-SQL).For more information, see OVER Clause (Transact-SQL).
order_by_clauseorder_by_clauseПредложение определяет последовательность, в которой строкам назначаются уникальные номера с помощью функции в пределах указанной секции.The clause determines the sequence in which the rows are assigned their unique within a specified partition. Оно должно указываться обязательно.It is required. Дополнительные сведения см. в статье Предложение OVER (Transact-SQL).For more information, see OVER Clause (Transact-SQL).
ArgumentosArguments
PARTITION BY value_expressionPARTITION BY value_expressionDivide o conjunto de resultados produzido pela cláusula FROM nas partições às quais a função ROW_NUMBER é aplicada.Divides the result set produced by the FROM clause into partitions to which the ROW_NUMBER function is applied. value_expression especifica a coluna pela qual o conjunto de resultados é particionado.value_expression specifies the column by which the result set is partitioned. Se não for especificado, a função tratará todas as linhas do conjunto de resultados da consulta como um único grupo.If is not specified, the function treats all rows of the query result set as a single group. Para obter mais informações, consulte Cláusula OVER (Transact-SQL).For more information, see OVER Clause (Transact-SQL).
order_by_clauseorder_by_clauseA cláusula determina a sequência na qual as linhas recebem seu exclusivo em uma partição especificada.The clause determines the sequence in which the rows are assigned their unique within a specified partition. É obrigatório.It is required. Para obter mais informações, consulte Cláusula OVER (Transact-SQL).For more information, see OVER Clause (Transact-SQL).
PARTITION BY и LAG, LEAD и RANK
PARTITION BY позволяет сгруппировать строки по значению определённого столбца. Это полезно, если данные логически делятся на какие-то категории и нужно что-то сделать с данной строкой с учётом других строк той же группы (скажем, сравнить теннисиста с остальными теннисистами, но не с бегунами или пловцами). Этот оператор работает только с оконными функциями типа LAG, LEAD, RANK и т. д.
LAG
Функция LAG берёт строку и возвращает ту, которая шла перед ней. Например, мы хотим найти всех олимпийских чемпионов по теннису (мужчин и женщин отдельно), начиная с 2004 года, и для каждого из них выяснить, кто был предыдущим чемпионом.
Решение этой задачи требует нескольких шагов. Сначала надо создать табличное выражение, которое сохранит результат запроса «чемпионы по теннису с 2004 года» как временную именованную структуру для дальнейшего анализа. А затем разделить их по полу и выбрать предыдущего чемпиона с помощью LAG:
Функция PARTITION BY в таблице вернула сначала всех мужчин, потом всех женщин. Для победителей 2008 и 2012 года приведён предыдущий чемпион; так как данные есть только за 3 олимпиады, у чемпионов 2004 года нет предшественников, поэтому в соответствующих полях стоит null.
LEAD
Функция LEAD похожа на LAG, но вместо предыдущей строки возвращает следующую. Можно узнать, кто стал следующим чемпионом после того или иного спортсмена:
RANK
Оператор RANK похож на ROW_NUMBER, но присваивает одинаковые номера строкам с одинаковыми значениями, а «лишние» номера пропускает. Есть также DENSE_RANK, который не пропускает номеров. Звучит запутанно, так что проще показать на примере. Вот ранжирование стран по числу олимпиад, в которых они участвовали, разными операторами:
- Row_number — ничего интересного, строки просто пронумерованы по возрастанию.
- Rank_number — строки ранжированы по возрастанию, но нет номера 3. Вместо этого, 2 строки делят номер 2, а за ними сразу идёт номер 4.
- Dense_rank — то же самое, что и rank_number, но номер 3 не пропущен. Номера идут подряд, но зато никто не оказался пятым из пяти.
Вот код:
Ejemplos: Azure Synapse AnalyticsAzure Synapse Analytics y Almacenamiento de datos paralelosParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Almacenamiento de datos paralelosParallel Data Warehouse
E.E. Devolver el número de fila de vendedorReturning the row number for salespeople
En este ejemplo se devuelve para los representantes de ventas en función de su cuota de ventas asignada.The following example returns the for sales representatives based on their assigned sales quota.
A continuación se muestra un conjunto parcial de resultados.Here is a partial result set.
F.F. Usar ROW_NUMBER() con PARTITIONUsing ROW_NUMBER() with PARTITION
El ejemplo siguiente muestra cómo utilizar la función con el argumento .The following example shows using the function with the argument. Esto provoca que la función enumere las filas de cada partición.This causes the function to number the rows in each partition.
A continuación se muestra un conjunto parcial de resultados.Here is a partial result set.
Виды функций
Оконные функции можно подразделить на следующие группы:
- Агрегатные функции;
- Ранжирующие функции;
- Функции смещения;
- Аналитические функции.
В одной инструкции SELECT с одним предложением FROM можно использовать сразу несколько оконных функций. Давайте подробно разберем каждую группу и пройдемся по основным функциям.
Агрегатные функции
Агрегатные функции – это функции, которые выполняют на наборе данных арифметические вычисления и возвращают итоговое значение.
- SUM – возвращает сумму значений в столбце;
- COUNT — вычисляет количество значений в столбце (значения NULL не учитываются);
- AVG — определяет среднее значение в столбце;
- MAX — определяет максимальное значение в столбце;
- MIN — определяет минимальное значение в столбце.
Пример использования агрегатных функций с оконной инструкцией OVER:
SELECT Date , Medium , Conversions , SUM(Conversions) OVER(PARTITION BY Date) AS 'Sum' , COUNT(Conversions) OVER(PARTITION BY Date) AS 'Count' , AVG(Conversions) OVER(PARTITION BY Date) AS 'Avg' , MAX(Conversions) OVER(PARTITION BY Date) AS 'Max' , MIN(Conversions) OVER(PARTITION BY Date) AS 'Min' FROM Orders
Ранжирующие функции
Ранжирующие функции – это функции, которые ранжируют значение для каждой строки в окне. Например, их можно использовать для того, чтобы присвоить порядковый номер строке или составить рейтинг.
- ROW_NUMBER – функция возвращает номер строки и используется для нумерации;
- RANK — функция возвращает ранг каждой строки. В данном случае значения уже анализируются и, в случае нахождения одинаковых, возвращает одинаковый ранг с пропуском следующего значения;
- DENSE_RANK — функция возвращает ранг каждой строки. Но в отличие от функции RANK, она для одинаковых значений возвращает ранг, не пропуская следующий;
- NTILE – это функция, которая позволяет определить к какой группе относится текущая строка. Количество групп задается в скобках.
SELECT Date , Medium , Conversions , ROW_NUMBER() OVER(PARTITION BY Date ORDER BY Conversions) AS 'Row_number' , RANK() OVER(PARTITION BY Date ORDER BY Conversions) AS 'Rank' , DENSE_RANK() OVER(PARTITION BY Date ORDER BY Conversions) AS 'Dense_Rank' , NTILE(3) OVER(PARTITION BY Date ORDER BY Conversions) AS 'Ntile' FROM Orders
Функции смещения
Функции смещения – это функции, которые позволяют перемещаться и обращаться к разным строкам в окне, относительно текущей строки, а также обращаться к значениям в начале или в конце окна.
- LAG или LEAD – функция LAG обращается к данным из предыдущей строки окна, а LEAD к данным из следующей строки. Функцию можно использовать для того, чтобы сравнивать текущее значение строки с предыдущим или следующим. Имеет три параметра: столбец, значение которого необходимо вернуть, количество строк для смещения (по умолчанию 1), значение, которое необходимо вернуть если после смещения возвращается значение NULL;
- FIRST_VALUE или LAST_VALUE — с помощью функции можно получить первое и последнее значение в окне. В качестве параметра принимает столбец, значение которого необходимо вернуть.
SELECT Date , Medium , Conversions , LAG(Conversions) OVER(PARTITION BY Date ORDER BY Date) AS 'Lag' , LEAD(Conversions) OVER(PARTITION BY Date ORDER BY Date) AS 'Lead' , FIRST_VALUE(Conversions) OVER(PARTITION BY Date ORDER BY Date) AS 'First_Value' , LAST_VALUE(Conversions) OVER(PARTITION BY Date ORDER BY Date) AS 'Last_Value' FROM Orders
Аналитические функции
Аналитические функции — это функции которые возвращают информацию о распределении данных и используются для статистического анализа.
- CUME_DIST — вычисляет интегральное распределение (относительное положение) значений в окне;
- PERCENT_RANK — вычисляет относительный ранг строки в окне;
- PERCENTILE_DISC — вычисляет определенный процентиль для отсортированных значений в наборе данных. В качестве параметра принимает процентиль, который необходимо вычислить.
Важно! У функций PERCENTILE_CONT и PERCENTILE_DISC, столбец, по которому будет происходить сортировка, указывается с помощью ключевого слова WITHIN GROUP
SELECT Date , Medium , Conversions , CUME_DIST() OVER(PARTITION BY Date ORDER BY Conversions) AS 'Cume_Dist' , PERCENT_RANK() OVER(PARTITION BY Date ORDER BY Conversions) AS 'Percent_Rank' , PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY Conversions) OVER(PARTITION BY Date) AS 'Percentile_Cont' , PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY Conversions) OVER(PARTITION BY Date) AS 'Percentile_Disc' FROM Orders
MySQL ROW_NUMBER() syntax
MySQL introduced the function since version 8.0. The is a window function or analytic function that assigns a sequential number to each row to which it applied beginning with one.
Notice that if you use MySQL with version less than 8.0, you can emulate some functionality of the function using various techniques.
The following shows the syntax of the function:
partition_definition
The has the following syntax:
The clause breaks the rows into smaller sets. The expression can be any valid expression that would be used in the clause. You can use multiple expressions separated by commas.
The clause is optional. If you omit it, the entire result set is considered a partition. However, when you use the clause, each partition can be also considered as a window.
order_definition
The syntax looks like the following:
The purpose of the clause is to set the orders of rows. This clause is independent of the clause of the query.
SQL ROW_NUMBER() Function Overview
The is a window function that assigns a sequential integer number to each row in the query’s result set.
The following illustrates the syntax of the function:
In this syntax,
- First, the clause divides the result set returned from the clause into partitions. The clause is optional. If you omit it, the whole result set is treated as a single partition.
- Then, the clause sorts the rows in each partition. Because the is an order sensitive function, the clause is required.
- Finally, each row in each partition is assigned a sequential integer number called a row number. The row number is reset whenever the partition boundary is crossed.
Allgemeine HinweiseGeneral Remarks
Es gibt keine Garantie, dass die mithilfe von zurückgegebenen Zeilen bei jeder Ausführung exakt gleich sind, es sei denn, die folgenden Bedingungen treffen zu.There is no guarantee that the rows returned by a query using will be ordered exactly the same with each execution unless the following conditions are true.
-
Werte der partitionierten Spalte sind eindeutig.Values of the partitioned column are unique.
-
Werte der -Spalten sind eindeutig.Values of the columns are unique.
-
Kombinationen der Werte der Partitionsspalte und -Spalten sind eindeutig.Combinations of values of the partition column and columns are unique.
ist nicht deterministisch. is nondeterministic. Weitere Informationen finden Sie unter Deterministic and Nondeterministic Functions.For more information, see Deterministic and Nondeterministic Functions.
Какой контент использовать
ExemplosExamples
a.A. Exemplos simplesSimple examples
A consulta a seguir retorna as quatro tabelas do sistema em ordem alfabética.The following query returns the four system tables in alphabetic order.
Este é o conjunto de resultados.Here is the result set.
namename | recovery_model_descrecovery_model_desc |
---|---|
mastermaster | SIMPLESSIMPLE |
modelomodel | FULLFULL |
msdbmsdb | SIMPLESSIMPLE |
tempdbtempdb | SIMPLESSIMPLE |
Para adicionar uma coluna de número de linha na frente de cada linha, adicione uma coluna com a função , nesse caso, chamada .To add a row number column in front of each row, add a column with the function, in this case named . É necessário mover a cláusula até a cláusula .You must move the clause up to the clause.
Este é o conjunto de resultados.Here is the result set.
Row#Row# | namename | recovery_model_descrecovery_model_desc |
---|---|---|
11 | mastermaster | SIMPLESSIMPLE |
22 | modelomodel | FULLFULL |
33 | msdbmsdb | SIMPLESSIMPLE |
44 | tempdbtempdb | SIMPLESSIMPLE |
A adição de uma cláusula à coluna reiniciará a numeração quando o valor for alterado.Adding a clause on the column, will restart the numbering when the value changes.
Este é o conjunto de resultados.Here is the result set.
Row#Row# | namename | recovery_model_descrecovery_model_desc |
---|---|---|
11 | modelomodel | FULLFULL |
11 | mastermaster | SIMPLESSIMPLE |
22 | msdbmsdb | SIMPLESSIMPLE |
33 | tempdbtempdb | SIMPLESSIMPLE |
B.B. Retornando o número de linha para vendedoresReturning the row number for salespeople
O exemplo a seguir calcula um número de linha para os vendedores da Ciclos da Adventure WorksAdventure Works Cycles com base em sua classificação de vendas no ano até a data.The following example calculates a row number for the salespeople in Ciclos da Adventure WorksAdventure Works Cycles based on their year-to-date sales ranking.
Este é o conjunto de resultados.Here is the result set.
C.C. Retornando um subconjunto de linhasReturning a subset of rows
O exemplo a seguir calcula números de linha para todas as linhas da tabela na ordem de e retorna somente as linhas de a .The following example calculates row numbers for all rows in the table in the order of the and returns only rows to inclusive.
D.D. Usando ROW_NUMBER () com PARTITIONUsing ROW_NUMBER() with PARTITION
O exemplo a seguir usa o argumento para particionar o conjunto de resultados da consulta pela coluna .The following example uses the argument to partition the query result set by the column . A cláusula especificada na cláusula ordena as linhas em cada partição pela coluna .The clause specified in the clause orders the rows in each partition by the column . A cláusula na instrução ordena o conjunto de resultados inteiro da consulta por .The clause in the statement orders the entire query result set by .
Este é o conjunto de resultados.Here is the result set.
Esempi: Azure Synapse AnalyticsAzure Synapse Analytics e Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Parallel Data WarehouseParallel Data Warehouse
E.E. Restituzione del numero di riga per i venditoriReturning the row number for salespeople
L’esempio seguente restituisce il valore per i venditori in base alle rispettive quote di vendita assegnate.The following example returns the for sales representatives based on their assigned sales quota.
Set di risultati parziale:Here is a partial result set.
F.F. Utilizzo di ROW_NUMBER() con PARTITIONUsing ROW_NUMBER() with PARTITION
Nell’esempio seguente viene illustrato l’utilizzo della funzione con l’argomento .The following example shows using the function with the argument. Ciò determina la numerazione, da parte della funzione , delle righe in ogni partizione.This causes the function to number the rows in each partition.
Set di risultati parziale:Here is a partial result set.
ПримерыExamples
A.A. Простые примерыSimple examples
Приведенный ниже запрос возвращает четыре системные таблицы в алфавитном порядке.The following query returns the four system tables in alphabetic order.
Результирующий набор:Here is the result set.
namename | recovery_model_descrecovery_model_desc |
---|---|
mastermaster | ПРОСТОЙSIMPLE |
modelmodel | FULLFULL |
msdbmsdb | ПРОСТОЙSIMPLE |
tempdbtempdb | ПРОСТОЙSIMPLE |
Чтобы добавить столбец с номерами строк перед каждой строкой, добавьте столбец с помощью функции , в данном случае с именем .To add a row number column in front of each row, add a column with the function, in this case named . Предложение необходимо переместить к предложению .You must move the clause up to the clause.
Результирующий набор:Here is the result set.
Номер строкиRow# | namename | recovery_model_descrecovery_model_desc |
---|---|---|
11 | mastermaster | ПРОСТОЙSIMPLE |
22 | modelmodel | FULLFULL |
33 | msdbmsdb | ПРОСТОЙSIMPLE |
44 | tempdbtempdb | ПРОСТОЙSIMPLE |
Добавление предложения для столбца приведет к тому, что нумерация начнется заново при изменении значения .Adding a clause on the column, will restart the numbering when the value changes.
Результирующий набор:Here is the result set.
Номер строкиRow# | namename | recovery_model_descrecovery_model_desc |
---|---|---|
11 | modelmodel | FULLFULL |
11 | mastermaster | ПРОСТОЙSIMPLE |
22 | msdbmsdb | ПРОСТОЙSIMPLE |
33 | tempdbtempdb | ПРОСТОЙSIMPLE |
Б.B. Возврат номера строки для salespeopleReturning the row number for salespeople
В следующем примере показан расчет номера строки для salespeople в Компания Adventure Works CyclesAdventure Works Cycles, выполняемый на основе ранжирования продаж за текущий год.The following example calculates a row number for the salespeople in Компания Adventure Works CyclesAdventure Works Cycles based on their year-to-date sales ranking.
Результирующий набор:Here is the result set.
В.C. Возврат подмножества строкReturning a subset of rows
В следующем примере показан расчет номеров всех строк в таблице в порядке с последующим возвращением строк с номерами от до включительно.The following example calculates row numbers for all rows in the table in the order of the and returns only rows to inclusive.
Г.D. Использование ROW_NUMBER() с PARTITIONUsing ROW_NUMBER() with PARTITION
В следующем примере аргумент используется для секционирования результирующего набора запроса по столбцу .The following example uses the argument to partition the query result set by the column . Предложение , указанное в предложении , упорядочивает строки каждой секции по столбцу .The clause specified in the clause orders the rows in each partition by the column . Предложение в инструкции упорядочивает полный результирующий набор запроса по .The clause in the statement orders the entire query result set by .
Результирующий набор:Here is the result set.