Función de ventana RANK - Amazon Redshift

Función de ventana RANK

La función de ventana RANK determina la clasificación de un valor en un grupo de valores, según la expresión ORDER BY en la cláusula OVER. Si hay una cláusula opcional PARTITION BY, las clasificaciones de restablecen para cada grupo de filas. Las filas con valores iguales para el criterio de clasificación reciben la misma clasificación. Amazon Redshift agrega el número de filas vinculadas a la clasificación vinculada para calcular la siguiente clasificación; por tanto, es posible que las clasificaciones no tengan números consecutivos. Por ejemplo, si dos filas tienen clasificación 1, la siguiente clasificación es 3.

RANK difiere de Función de ventana DENSE_RANK en un aspecto: para DENSE_RANK, si se vinculan dos o más filas, no hay brecha 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 diferentes cláusulas PARTITION BY y ORDER 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 para la función RANK.

PARTITION BY expr_list

Opcional. Una o más expresiones que definen la ventana.

ORDER BY 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 de retorno es 1 para todas las filas.

Si ORDER BY no produce un ordenamiento único, el orden de las filas no es determinístico. 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 en este ejemplo incluye las columnas 2 y 1 para asegurarse de que Amazon Redshift devuelva los resultados ordenados de manera uniforme cada vez que se ejecute esta consulta. Por ejemplo, las filas con ID de ventas 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 más alto de clasificación se aplica al valor QTY más 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 según SELLERID, se ordena cada partición según la cantidad (en orden descendiente) y se asigna una clasificación 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)