Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
RANKfunción de ventana
La función de RANK ventana determina el rango de un valor en un grupo de valores, en función de la expresión ORDER BY de la OVER cláusula. Si la cláusula PARTITION BY opcional está presente, se restablecen las clasificaciones de cada grupo de filas. Las filas con valores iguales para los criterios de clasificación reciben la misma clasificación. AWS Clean Rooms suma el número de filas empatadas a la clasificación empatada para calcular la siguiente clasificación y, por lo tanto, es posible que las filas no sean números consecutivos. Por ejemplo, si dos filas tienen clasificación 1, la siguiente clasificación es 3.
RANKdifiere de la siguiente DENSE_ función RANK de ventana en un aspecto: en el caso de DENSE _RANK, si dos o más filas están empatadas, no hay ningún hueco en la secuencia de valores clasificados. Por ejemplo, si dos filas tienen clasificación 1, la siguiente clasificación es 2.
Puede tener funciones de clasificación con distintas cláusulas PARTITION ORDER BY y BY en la misma consulta.
Sintaxis
RANK () OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list ] )
Argumentos
- ( )
-
La función no toma argumentos, pero se necesitan los paréntesis vacíos.
- OVER
-
Las cláusulas de ventana de la RANK función.
- PARTITIONDE expr_list
-
Opcional. Una o más expresiones que definen la ventana.
- ORDERDE order_list
-
Opcional. Define las columnas en que se basan los valores de clasificación. Si no se especifica PARTITION BY, ORDER BY utiliza toda la tabla. Si se omite ORDER BY, el valor devuelto es 1 para todas las filas.
Si ORDER BY no produce un orden único, el orden de las filas no es determinista. Para obtener más información, consulte Ordenación única de datos para funciones de ventana.
Tipo de retorno
INTEGER
Ejemplos
En el siguiente ejemplo, se ordena la tabla por la cantidad vendida (orden ascendiente predeterminado) y se asigna una clasificación a cada fila. Un valor de 1 es la mejor clasificación. Los resultados se ordenan después de que se apliquen los resultados de la función de ventana:
select salesid, qty, rank() over (order by qty) as rnk from winsales order by 2,1; salesid | qty | rnk --------+-----+----- 10001 | 10 | 1 10006 | 10 | 1 30001 | 10 | 1 40005 | 10 | 1 30003 | 15 | 5 20001 | 20 | 6 20002 | 20 | 6 30004 | 20 | 6 10005 | 30 | 9 30007 | 30 | 9 40001 | 40 | 11 (11 rows)
Tenga en cuenta que la cláusula ORDER BY externa de este ejemplo incluye las columnas 2 y 1 para garantizar que AWS Clean Rooms devuelva los resultados ordenados de forma coherente cada vez que se ejecute la consulta. Por ejemplo, las filas con ventas IDs 10001 y 10006 tienen valores QTY y RNK idénticos. Ordenar el resultado final por columna 1 garantiza que la fila 10001 siempre esté antes que la 10006. Para ver una descripción de la tabla WINSALES, consulte Tabla de muestra para ejemplos de funciones de ventana.
En el siguiente ejemplo, la ordenación se invierte para la función de ventana (order by qty desc
). Ahora, el valor de clasificación más alto se aplica al valor más QTY alto.
select salesid, qty, rank() over (order by qty desc) as rank from winsales order by 2,1; salesid | qty | rank ---------+-----+----- 10001 | 10 | 8 10006 | 10 | 8 30001 | 10 | 8 40005 | 10 | 8 30003 | 15 | 7 20001 | 20 | 4 20002 | 20 | 4 30004 | 20 | 4 10005 | 30 | 2 30007 | 30 | 2 40001 | 40 | 1 (11 rows)
Para ver una descripción de la tabla WINSALES, consulte Tabla de muestra para ejemplos de funciones de ventana.
En el siguiente ejemplo, se divide la tabla porSELLERID, se ordena cada partición por cantidad (en orden descendente) y se asigna un rango a cada fila. Los resultados se ordenan después de que se apliquen los resultados de la función de ventana.
select salesid, sellerid, qty, rank() over (partition by sellerid order by qty desc) as rank from winsales order by 2,3,1; salesid | sellerid | qty | rank --------+----------+-----+----- 10001 | 1 | 10 | 2 10006 | 1 | 10 | 2 10005 | 1 | 30 | 1 20001 | 2 | 20 | 1 20002 | 2 | 20 | 1 30001 | 3 | 10 | 4 30003 | 3 | 15 | 3 30004 | 3 | 20 | 2 30007 | 3 | 30 | 1 40005 | 4 | 10 | 2 40001 | 4 | 40 | 1 (11 rows)