20th Jul 2022 Lectura de 7 minutos ¿Qué es la función RANK() en SQL y cómo se utiliza? Kateryna Koidan SQL aprender SQL clasificar ejercicio online funciones de ventana Índice Introducción a la función RANK() Clasificación básica Clasificación dentro de diferentes grupos Otras funciones de clasificación en SQL Es hora de practicar las funciones de clasificación ¿Quiénes son sus 10 clientes más importantes? ¿Quiénes son los empleados con mayor rendimiento en cada departamento? Para responder a estas preguntas, necesitará clasificar la salida de su consulta SQL. Veamos cómo la función RANK() ayuda a clasificar los resultados en SQL. Hay muchos casos de uso en los que puede necesitar clasificar filas en SQL. Puede querer clasificar a los clientes en función del volumen de ventas, a los estudiantes en función de los resultados de sus exámenes, a los activos de la empresa en función de su valor actual, a los departamentos en función del número de empleados o a los usuarios en función de su fecha de registro. La clasificación es una herramienta importante y común en el análisis de datos. En este tutorial, proporcionaré explicaciones detalladas sobre cómo clasificar filas en SQL. Introducción a la función RANK() La función RANK() es una de las funciones de ventana en SQL. Las funciones de ventana miran una parte de los datos y calculan los resultados de esta parte. La función RANK(), específicamente, asigna un rango a cada fila basado en una columna proporcionada. RANK() se incluye en la sentencia SELECT con la siguiente sintaxis: RANK() OVER (ORDER BY column ASC|DESC) Básicamente, se añade otra columna al conjunto de resultados. Esta columna incluye el rango de cada registro basado en el orden especificado después de la palabra clave ORDER BY. Esto implica especificar (1) la columna a utilizar para ordenar las filas y (2) si el orden debe ser ascendente o descendente. La primera fila obtiene el rango 1, y las siguientes filas obtienen rangos más altos. Si alguna fila tiene el mismo valor en la columna utilizada para la ordenación, se clasifica igual. La función RANK() deja huecos en estos casos. Por ejemplo, si la primera y la segunda fila tienen el mismo valor en la columna proporcionada, ambas obtienen el rango 1. Entonces, la tercera fila obtiene el rango 3 (es decir, falta el rango 2). Para adquirir confianza con la función RANK(), consulte nuestro curso interactivo Funciones de ventana interactivo. También cubre otras funciones de clasificación que tienen diferentes enfoques para procesar los mismos valores en la columna proporcionada. Ahora, veamos la función RANK() en acción. Clasificación básica Para ver cómo funciona la función RANK() en la práctica, vamos a ver un ejemplo. Imaginemos que tenemos un equipo de desarrolladores. Queremos clasificarlos en función de su experiencia. Esta es la tabla con la que empezamos: developers idfirst_namelast_namelevelyears_experience 10JackDavisjunior1 11HelenBrownjunior0 12KateWilliamssenior4 13AlexMillersenior8 14SophiaMooremid-level3 15NickJacksonmid-level3 16StevenMartinjunior2 17MeganStevensjunior1 18JohnJonessenior5 19MaxWebermid-level4 Ahora, nuestra tarea es mostrar el nombre, el apellido, el nivel de antigüedad, los años de experiencia y el rango de los desarrolladores. Queremos que el desarrollador con más experiencia obtenga el rango 1. Aquí está nuestra consulta SQL junto con el conjunto de resultados: SELECT first_name, last_name, level, years_experience, RANK() OVER (ORDER BY years_experience DESC) FROM developers; first_namelast_namelevelyears_experiencerank AlexMillersenior81 JohnJonessenior52 MaxWebermid-level43 KateWilliamssenior43 NickJacksonmid-level35 SophiaMooremid-level35 StevenMartinjunior27 MeganStevensjunior18 JackDavisjunior18 HelenBrownjunior010 Para clasificar a los desarrolladores en función de su experiencia, hemos incluido el siguiente campo en la sentencia SELECT: RANK() OVER (ORDER BY years_experience DESC) Definimos el orden después de la cláusula ORDER BY especificando la columna a utilizar para la clasificación (years_experience) y el orden (descendente). A continuación, clasificamos los desarrolladores en función de este orden. Vemos que el desarrollador con 8 años de experiencia obtiene el rango 1, el desarrollador con 5 años de experiencia obtiene el rango 2, y los dos desarrolladores con 4 años de experiencia obtienen el rango 3. Tenga en cuenta que la función RANK() deja un hueco aquí, y los siguientes desarrolladores obtienen el rango 5 (es decir, falta el rango 4). Ahora tienes una idea de cómo funciona la función RANK(), incluyendo cómo procesa los mismos valores en la columna utilizada para la ordenación. Puedes encontrar más casos de uso en esta guía completa de clasificación de filas en SQL. Ahora, pasaremos a ejemplos más avanzados. Clasificación dentro de diferentes grupos En nuestro primer ejemplo, hemos clasificado todo el conjunto de resultados. Ahora, digamos que queremos tener una clasificación separada para cada uno de los niveles de antigüedad (es decir, junior, nivel medio y senior). Con la función RANK() de SQL, podemos hacerlo añadiendo la palabra clave PARTITION BY y especificando la columna que se utilizará para agrupar los registros. Esta es nuestra consulta SQL: SELECT first_name, last_name, level, years_experience, RANK() OVER (PARTITION BY level ORDER BY years_experience DESC) FROM developers; En la cláusula OVER(), primero definimos cómo agrupar los registros (utilizando la columna level ) y luego definimos cómo ordenar los registros dentro de estos grupos (basándonos en los años de experiencia, empezando por el desarrollador más experimentado). Esta es la tabla resultante: first_namelast_namelevelyears_experiencerank StevenMartinjunior21 JackDavisjunior12 MeganStevensjunior12 HelenBrownjunior04 MaxWebermid-level41 NickJacksonmid-level32 SophiaMooremid-level32 AlexMillersenior81 JohnJonessenior52 KateWilliamssenior43 Observa que tenemos clasificaciones separadas para los niveles junior, medio y senior. Aun así, el desarrollador más experimentado de cada grupo obtiene el puesto 1, y los desarrolladores con menos experiencia obtienen puestos más altos. Además, observa que aunque Kate Williams y Max Weber tienen los mismos 4 años de experiencia, Max obtiene el puesto 1 como desarrollador de nivel medio con más experiencia, mientras que Kate obtiene el puesto 3 como desarrolladora senior con menos experiencia. Ahora que sabe cómo funciona PARTITION BY, es hora de conocer otras funciones de clasificación. Otras funciones de clasificación en SQL Para clasificar filas en SQL, también puede utilizar las funciones DENSE_RANK() y ROW_NUMBER(). La diferencia radica en la forma en que estas funciones manejan los mismos valores. Como aprendimos anteriormente, la función RANK() da el mismo rango a los registros con el mismo valor y deja un espacio para dar cuenta de estos registros. En cambio la función DENSE_RANK() no deja un hueco; la función ROW_NUMBER() clasifica todos los registros de forma diferente, aunque los valores sean los mismos. Es más fácil entender esta diferencia con un ejemplo. Así pues, volvamos a nuestro primer caso de uso en el que clasificamos todo el conjunto de resultados. Pero, esta vez, también utilizaremos DENSE_RANK() y ROW_NUMBER(): SELECT first_name, last_name, level, years_experience, RANK() OVER (ORDER BY years_experience DESC), DENSE_RANK() OVER (ORDER BY years_experience DESC), ROW_NUMBER() OVER (ORDER BY years_experience DESC) FROM developers; first_namelast_namelevelyears_experiencerankdense_rankrow_number AlexMillersenior8111 JohnJonessenior5222 MaxWebermid-level4333 KateWilliamssenior4334 NickJacksonmid-level3545 SophiaMooremid-level3546 StevenMartinjunior2757 MeganStevensjunior1868 JackDavisjunior1869 HelenBrownjunior010710 Al igual que la función RANK(), la función DENSE_RANK() da el mismo rango a los desarrolladores con los mismos años de experiencia (por ejemplo, el rango 3 a Kate Williams y Max Weber). Sin embargo, el siguiente rango en la columna dense_rank es el 4, lo que no deja ningún hueco en la clasificación. Por otro lado, la función ROW_NUMBER() asigna un número diferente a todos los desarrolladores, incluidos los que tienen los mismos años de experiencia. Entonces, ¿por qué Max obtiene el rango 3 y Kate el 4? Es una elección arbitraria, y nunca se sabe a cuál de los registros con el mismo valor se le asignará un rango superior. Ahora que conoce la diferencia entre las funciones de clasificación, puede decidir cuál es la más adecuada para sus casos de uso. Si no está seguro, vea más ejemplos de las funciones RANK(), DENSE_RANK(), y ROW_NUMBER() en este artículo general. Es hora de practicar las funciones de clasificación Las funciones de clasificación se encuentran entre las herramientas más comunes utilizadas por los analistas de datos. Por lo tanto, debería sentirse seguro con la clasificación en SQL. Y la confianza viene con la práctica. Consulte este Funciones de ventana curso que incluye 218 ejercicios interactivos que cubren funciones de clasificación, funciones de análisis, cálculo de estadísticas avanzadas con diferentes marcos de ventana, etc. Puede obtener más información sobre el curso en este artículo. Y aquí hay un extra: esta hoja de trucos de 2 páginas de SQL Funciones de ventana le ayudará a practicar las funciones de clasificación y otras funciones de ventana. Gracias por leer, y ¡feliz aprendizaje! Tags: SQL aprender SQL clasificar ejercicio online funciones de ventana