Row_number (transact-sql)row_number (transact-sql)
Содержание:
- Псевдостолбец ROWID
- ОграниченияLimitations and Restrictions
- Функция NTILE
- XML Functions
- Comentários geraisGeneral Remarks
- MySQL ROW_NUMBER() function examples
- BeispieleExamples
- Пример PRAGMA UDF
- ArgumentosArguments
- 全般的な解説General Remarks
- 引数Arguments
- 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
- Exemples : Azure Synapse AnalyticsAzure Synapse Analytics et Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Parallel Data WarehouseParallel Data Warehouse
- Character Functions Returning Character Values
- ArgumenteArguments
- Exemplos: Azure Synapse AnalyticsAzure Synapse Analytics e Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Parallel Data WarehouseParallel Data Warehouse
- Osservazioni generaliGeneral Remarks
- SQL ROW_NUMBER() Function Overview
- Esempi: Azure Synapse AnalyticsAzure Synapse Analytics e Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Parallel Data WarehouseParallel Data Warehouse
- Allgemeine HinweiseGeneral Remarks
Псевдостолбец ROWID
севдостолбцами в Oracle принять называть столбцы, которые отсутствуют в таблицах в явном виде, но могут быть использованы в запросах. Наиболее употребимым и важным из них является ROWID псевдостолбец, являющийся уникальным идентификатором строки. Он не просто гарантированно уникален в рамках таблицы более того: он уникален в рамках базы данных. С физической точки зрения ROWID является своеобразной координатой записи в базе.
Необходимо отметить, что существование ROWID противоречит как минимум двум из двенадцати известных правил Кодда, описывающих требования к реляционной СУБД. Во-первых, ROWID нарушает правило номер 2, которое гласит: «К каждому элементу данных должен быть обеспечен доступ при помощи комбинации имени таблицы, первичного ключа строки и имени столбца». В данном случае ROWID не является первичным ключом, хотя ввиду его уникальности для каждой строки он может выступать в роли первичного ключа.
Во-вторых, нарушается правило Кодда номер 8: «Прикладные программы не должны зависеть от используемых способов хранения данных на носителях и методов обращения к ним». Нарушение этого правила происходит из-за того, что ROWID по своей сути является физической координатой записи, поэтому он будет изменяться в случае пересоздания таблицы, перезагрузки данных, перемещения таблицы из одного табличного пространства в другое и т.п. Однако ROWID уникален и неизменен в течение сеанса пользователя, поэтому приложение может считать его неизменным.
ROWID существенно упрощает работу с базой данных, поскольку позволяет однозначно идентифицировать любую строку таблицы, что, в частности, позволяет удалять и редактировать строки таблиц без первичного ключа. Кроме того, поиск строки по ее ROWID является самым быстрым из возможных, что положительно сказывается на быстродействии приложений, активно модифицирующих данные. Однако ROWID является специфической особенностью Oracle, а следовательно, его нельзя применять при разработке приложений, рассчитанных на работу с базами других типов.
Рассмотрим простейший пример запроса, извлекающего ROWID строк:
ОграниченияLimitations and Restrictions
Предложение OVER не может использоваться с агрегатной функцией CHECKSUM.The OVER clause cannot be used with the CHECKSUM aggregate function.
RANGE нельзя использовать с PRECEDING <unsigned value specification> или FOLLOWING <unsigned value specification>.RANGE cannot be used with <unsigned value specification> PRECEDING or <unsigned value specification> FOLLOWING.
В зависимости от функции (ранжирующая, агрегатная или аналитическая), используемой с предложением OVER, <ORDER BY clause> и/или <ROWS and RANGE clause> могут не поддерживаться.Depending on the ranking, aggregate, or analytic function used with the OVER clause, <ORDER BY clause> and/or the <ROWS and RANGE clause> may not be supported.
Функция 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.
XML Functions
The XML functions operate on or return XML documents or fragments. These functions use arguments that are not defined as part of the ANSI/ISO/IEC SQL Standard but are defined as part of the World Wide Web Consortium (W3C) standards. The processing and operations that the functions perform are defined by the relevant W3C standards. The table below provides a link to the appropriate section of the W3C standard for the rules and guidelines that apply to each of these XML-related arguments. A SQL statement that uses one of these XML functions, where any of the arguments does not conform to the relevant W3C syntax, will result in an error. Of special note is the fact that not every character that is allowed in the value of a database column is considered legal in XML.
For more information about selecting and querying XML data using these functions, including information on formatting output, refer to .
The SQL XML functions are:
Comentários geraisGeneral Remarks
Não há nenhuma garantia de que as linhas retornadas por uma consulta que usa serão ordenadas exatamente da mesma maneira com cada execução, a menos que as condições a seguir sejam verdadeiras.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.
-
Os valores da coluna particionada sejam exclusivos.Values of the partitioned column are unique.
-
Os valores das colunas são exclusivos.Values of the columns are unique.
-
As combinações de valores da coluna de partição e colunas são exclusivas.Combinations of values of the partition column and columns are unique.
é não determinístico. is nondeterministic. Para obter mais informações, veja Funções determinísticas e não determinísticas.For more information, see Deterministic and Nondeterministic Functions.
MySQL ROW_NUMBER() function examples
Let’s use the table from the sample database for the demonstration:
1) Assigning sequential numbers to rows
The following statement uses the function to assign a sequential number to each row from the table:
Here is the output:
2) Finding top N rows of every group
You can use the function for the queries that find the top N rows for every group, for example, top three sales employees of every sales channel, top five high-performance products of every category.
The following statement finds the top three products that have the highest inventory of every product line:
In this example,
- First, we used the function to rank the inventory of all products in each product line by partitioning all products by product line and ordering them by quantity in stock in descending order. As the result, each product is assigned a rank based on its quantity in stock. and the rank is reset for each product line.
- Then, we selected only products whose rank is less than or equal to three.
The following shows the output:
3) Removing duplicate rows
You can use the to turn non-unique rows into unique rows and then delete the duplicate rows. Consider the following example.
First, create a table with some duplicate values:
Second, use the function to divide the rows into partitions by all columns. The row number will restart for each unique set of rows.
As you can see from the output, the unique rows are the ones whose the row number equals one.
Third, you can use the common table expression (CTE) to return the duplicate rows and delete statement to remove:
Notice that the MySQL does not support CTE based delete, therefore, we had to join the original table with the CTE as a workaround.
4) Pagination using function
Because the assigns each row in the result set a unique number, you can use it for pagination.
Suppose, you need to display a list of products with 10 products per page. To get the products for the second page, you use the following query:
Here is the output:
In this tutorial, you have learned how to use the MySQL function to generate a sequential number for each row in a result set.
- Was this tutorial helpful?
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.
Пример PRAGMA UDF
В ряде презентаций, предшествовавших официальному выпуску 12c, выступавшие упоминали PRAGMA UDF(User Defined Function), которая предположительно дает вам преимущества производительности встроенного PL/SQL, в то же время позволяя вам определять объект PL/SQL вне оператора SQL. Следующий код переопределяет предыдущую обычную функцию для использования этой прагмы.
Oracle PL/SQL
CREATE OR REPLACE FUNCTION normal_function(p_id IN NUMBER) RETURN NUMBER IS
PRAGMA UDF;
BEGIN
RETURN p_id;
END;
1 2 3 4 5 |
CREATEORREPLACEFUNCTIONnormal_function(p_idINNUMBER)RETURNNUMBERIS
PRAGMAUDF; RETURNp_id; END; |
Как только функция скомпилирована, выполнение теста из предыдущего раздела для этой функции дает довольно интересные результаты.
Oracle PL/SQL
SET SERVEROUTPUT ON
DECLARE
l_time PLS_INTEGER;
l_cpu PLS_INTEGER;
l_sql VARCHAR2(32767);
l_cursor SYS_REFCURSOR;
TYPE t_tab IS TABLE OF NUMBER;
l_tab t_tab;
BEGIN
l_time := DBMS_UTILITY.get_time;
l_cpu := DBMS_UTILITY.get_cpu_time;
l_sql := ‘WITH
FUNCTION with_function(p_id IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN p_id;
END;
SELECT with_function(id)
FROM t1’;
OPEN l_cursor FOR l_sql;
FETCH l_cursor
BULK COLLECT INTO l_tab;
CLOSE l_cursor;
DBMS_OUTPUT.put_line(‘WITH_FUNCTION : ‘ ||
‘Time=’ || TO_CHAR(DBMS_UTILITY.get_time — l_time) || ‘ hsecs ‘ ||
‘CPU Time=’ || (DBMS_UTILITY.get_cpu_time — l_cpu) || ‘ hsecs ‘);
l_time := DBMS_UTILITY.get_time;
l_cpu := DBMS_UTILITY.get_cpu_time;
l_sql := ‘SELECT normal_function(id)
FROM t1’;
OPEN l_cursor FOR l_sql;
FETCH l_cursor
BULK COLLECT INTO l_tab;
CLOSE l_cursor;
DBMS_OUTPUT.put_line(‘NORMAL_FUNCTION: ‘ ||
‘Time=’ || TO_CHAR(DBMS_UTILITY.get_time — l_time) || ‘ hsecs ‘ ||
‘CPU Time=’ || (DBMS_UTILITY.get_cpu_time — l_cpu) || ‘ hsecs ‘);
END;
WITH_FUNCTION : Time=44 hsecs CPU Time=40 hsecs
NORMAL_FUNCTION: Time=33 hsecs CPU Time=29 hsecs
PL/SQL procedure successfully completed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
SETSERVEROUTPUTON DECLARE l_timePLS_INTEGER; l_cpuPLS_INTEGER; l_sqlVARCHAR2(32767); l_cursorSYS_REFCURSOR; TYPEt_tabISTABLEOFNUMBER; l_tabt_tab; l_time:=DBMS_UTILITY.get_time; l_cpu:=DBMS_UTILITY.get_cpu_time; l_sql:=’WITH FUNCTION with_function(p_id IN NUMBER) RETURN NUMBER IS FROM t1′; OPENl_cursorFORl_sql; FETCHl_cursor BULKCOLLECTINTOl_tab; CLOSEl_cursor; DBMS_OUTPUT.put_line(‘WITH_FUNCTION : ‘|| ‘Time=’||TO_CHAR(DBMS_UTILITY.get_time-l_time)||’ hsecs ‘|| ‘CPU Time=’||(DBMS_UTILITY.get_cpu_time-l_cpu)||’ hsecs ‘); l_time:=DBMS_UTILITY.get_time; l_cpu:=DBMS_UTILITY.get_cpu_time; l_sql:=’SELECT normal_function(id) FROM t1′; OPENl_cursorFORl_sql; FETCHl_cursor BULKCOLLECTINTOl_tab; CLOSEl_cursor; DBMS_OUTPUT.put_line(‘NORMAL_FUNCTION: ‘|| ‘Time=’||TO_CHAR(DBMS_UTILITY.get_time-l_time)||’ hsecs ‘|| ‘CPU Time=’||(DBMS_UTILITY.get_cpu_time-l_cpu)||’ hsecs ‘);
END; |
Кажется, что автономная функция, использующая PRAGMA UDF, последовательно выполняет встроенную функцию.
У меня сложилось впечатление, что вызов функции, определенной с помощью PRAGMA UDF напрямую из PL / SQL, не удастся. Это не похоже на случайность.
Oracle PL/SQL
DECLARE
l_number NUMBER;
BEGIN
l_number := normal_function(1);
END;
PL/SQL procedure successfully completed.
1 2 3 4 5 6 7 |
DECLARE l_numberNUMBER; l_number:=normal_function(1); END; |
ArgumentosArguments
PARTITION BY value_expressionPARTITION BY value_expressionDivide el conjunto de resultados generado por la cláusula FROM en particiones a las que se aplica la función ROW_NUMBER.Divides the result set produced by the FROM clause into partitions to which the ROW_NUMBER function is applied. value_expression especifica la columna a partir de la cual se particiona el conjunto de resultados.value_expression specifies the column by which the result set is partitioned. Si no se especifica , la función trata todas las filas del conjunto de resultados de la consulta como un único grupo.If is not specified, the function treats all rows of the query result set as a single group. Para más información, vea Cláusula OVER (Transact-SQL).For more information, see OVER Clause (Transact-SQL).
order_by_clauseorder_by_clauseLa cláusula determina la secuencia en la que se asigna a las filas el único correspondiente en una partición especificada.The clause determines the sequence in which the rows are assigned their unique within a specified partition. Es obligatorio.It is required. Para más información, vea Cláusula OVER (Transact-SQL).For more information, see OVER Clause (Transact-SQL).
全般的な解説General Remarks
以下の条件が満たされている場合を除き、 を使用したクエリによって返される行が、実行ごとにまったく同じ順序になるという保証はありません。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.
-
パーティション分割された行の値が一意である。Values of the partitioned column are unique.
-
列の値が一意である。Values of the columns are unique.
-
パーティション分割された列と 列の値の組み合わせが一意である。Combinations of values of the partition column and columns are unique.
は非決定的です。 is nondeterministic. 詳細については、「 決定的関数と非決定的関数」を参照してください。For more information, see Deterministic and Nondeterministic Functions.
引数Arguments
PARTITION BY value_expressionPARTITION BY value_expressionFROM 句で生成された結果セットを、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. を指定しない場合、関数ではクエリ結果セットのすべての行を 1 つのグループとして扱います。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).
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.
Exemples : Azure Synapse AnalyticsAzure Synapse Analytics et Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Parallel Data WarehouseParallel Data Warehouse
E.E. Retour du nombre de lignes pour les vendeursReturning the row number for salespeople
L’exemple suivant retourne la valeur des représentants commerciaux en fonction de leur quota de ventes assigné.The following example returns the for sales representatives based on their assigned sales quota.
Voici un jeu de résultats partiel.Here is a partial result set.
F.F. Utilisation de Using ROW_NUMBER() avec PARTITIONUsing ROW_NUMBER() with PARTITION
L’exemple suivant illustre l’utilisation de la fonction avec l’argument .The following example shows using the function with the argument. Dans ce cas, la fonction numérote les lignes dans chaque partition.This causes the function to number the rows in each partition.
Voici un jeu de résultats partiel.Here is a partial result set.
Character Functions Returning Character Values
Character functions that return character values return values of the following data types unless otherwise documented:
-
If the input argument is or , then the value returned is .
-
If the input argument is or , then the value returned is .
The length of the value returned by the function is limited by the maximum length of the data type returned.
-
For functions that return or , if the length of the return value exceeds the limit, then Oracle Database truncates it and returns the result without an error message.
-
For functions that return values, if the length of the return values exceeds the limit, then Oracle raises an error and returns no data.
The character functions that return character values are:
ArgumenteArguments
PARTITION BY value_expressionPARTITION BY value_expressionTeilt das von der FROM-Klausel erzeugte Resultset in Partitionen, auf die die ROW_NUMBER-Funktion angewendet wird.Divides the result set produced by the FROM clause into partitions to which the ROW_NUMBER function is applied. value_expression gibt die Spalte an, nach der das Resultset partitioniert wird.value_expression specifies the column by which the result set is partitioned. Wird nicht angegeben, verarbeitet die Funktion alle Zeilen des Abfrageresultsets als einzelne Gruppe.If is not specified, the function treats all rows of the query result set as a single group. Weitere Informationen finden Sie unter OVER-Klausel (Transact-SQL).For more information, see OVER Clause (Transact-SQL).
order_by_clauseorder_by_clauseDie -Klausel bestimmt die Reihenfolge, in der den Zeilen die eindeutige innerhalb einer angegebenen Partition zugewiesen wird.The clause determines the sequence in which the rows are assigned their unique within a specified partition. Sie ist erforderlich.It is required. Weitere Informationen finden Sie unter OVER-Klausel (Transact-SQL).For more information, see OVER Clause (Transact-SQL).
Exemplos: Azure Synapse AnalyticsAzure Synapse Analytics e Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Parallel Data WarehouseParallel Data Warehouse
E.E. Retornando o número de linha para vendedoresReturning the row number for salespeople
O exemplo a seguir retorna o de representantes de vendas com base em suas cotas de vendas atribuídas.The following example returns the for sales representatives based on their assigned sales quota.
Este é um conjunto de resultados parcial.Here is a partial result set.
F.F. Usando ROW_NUMBER () com PARTITIONUsing ROW_NUMBER() with PARTITION
O exemplo a seguir mostra o uso da função com o argumento .The following example shows using the function with the argument. Isso faz com que a função numere as linhas em cada partição.This causes the function to number the rows in each partition.
Este é um conjunto de resultados parcial.Here is a partial result set.
Osservazioni generaliGeneral Remarks
Non esiste alcuna garanzia che le righe restituite da una query che usa vengano ordinate esattamente allo stesso modo a ogni esecuzione, a meno che le condizioni seguenti non siano vere.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.
-
Univocità dei valori della colonna partizionata.Values of the partitioned column are unique.
-
Univocità dei valori delle colonne .Values of the columns are unique.
-
Univocità delle combinazioni di valori della colonna di partizione e delle colonne .Combinations of values of the partition column and columns are unique.
è non deterministico. is nondeterministic. Per altre informazioni, vedere Funzioni deterministiche e non deterministiche.For more information, see Deterministic and Nondeterministic Functions.
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.
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.
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.