Las funciones de clasificación en MySql se utilizan para clasificar cada fila de una partición. Las funciones de clasificación también forman parte de la lista de funciones de Windows de MySQL.
- Estas funciones siempre se usan con la cláusula OVER() .
- Las funciones de clasificación siempre asignan la clasificación sobre la base de la cláusula ORDER BY .
- El rango se asigna a las filas de manera secuencial.
- La asignación de rango a las filas siempre comienza con 1 para cada partición nueva.
Hay 3 tipos de funciones de clasificación compatibles con MySQL:
- dense_rank():
esta función asignará rango a cada fila dentro de una partición sin espacios . Básicamente, los rangos se asignan de manera consecutiva, es decir, si hay un empate entre los valores, se les asignará el mismo rango y el valor del siguiente rango será uno mayor que el rango anterior asignado. - rank():
esta función asignará rango a cada fila dentro de una partición con espacios . Aquí, los rangos se asignan de manera no consecutiva, es decir, si hay un empate entre los valores, se les asignará el mismo rango y el siguiente valor de rango será el rango anterior + el número de pares (duplicados). - percent_rank():
Devuelve el rango percentil de una fila dentro de una partición que va de 0 a 1. Indica el porcentaje de valores de partición menores que el valor en la fila actual, excluyendo el valor más alto.
Para entender mejor estas funciones.
Consideremos el «resultado» de una tabla :
nombre de | asignaturas | Marcos |
---|---|---|
pratibha | Matemáticas | 100 |
Ankita | Ciencias | 80 |
Svarna | inglés | 100 |
Ankita | Matemáticas | sesenta y cinco |
pratibha | Ciencias | 80 |
Svarna | Ciencias | 50 |
pratibha | inglés | 70 |
Svarna | Matemáticas | 85 |
Ankita | inglés | 90 |
Consultas:
- función dense_rank()-
SELECT subjects, s_name, mark, dense_rank() OVER ( partition by subjects order by mark desc ) AS 'dense_rank' FROM result;
Producción-
Asignaturas Nombre Marca Rango_denso inglés Svarna 100 1 inglés Ankita 90 2 inglés pratibha 70 3 Matemáticas pratibha 100 1 Matemáticas Svarna 85 2 Matemáticas Ankita sesenta y cinco 3 Ciencias Ankita 80 1 Ciencias pratibha 80 1 Ciencias Svarna 50 2 Explicación-
Aquí, la tabla se divide sobre la base de «sujetos».
La cláusula order by se utiliza para organizar las filas de cada partición en orden descendente por «marca».
dense_rank() se usa para clasificar a los estudiantes en cada materia.
Tenga en cuenta que para la materia de ciencias hay un empate entre Ankita y Pratibha, por lo que a ambos se les asigna el mismo rango. El siguiente valor de rango se incrementa en 1, es decir, 2 para Swarna.
- función rank()-
SELECT subjects, s_name, mark, rank() OVER ( partition by subjects order by mark desc ) AS 'rank' FROM result;
Producción-
Asignaturas Nombre Marca rango inglés Svarna 100 1 inglés Ankita 90 2 inglés pratibha 70 3 Matemáticas pratibha 100 1 Matemáticas Svarna 85 2 Matemáticas Ankita sesenta y cinco 3 Ciencias Ankita 80 1 Ciencias pratibha 80 1 Ciencias Svarna 50 3 Explicación-
Su salida es similar a la función dense_rank().
Excepto que para la asignatura de Ciencias en caso de empate entre Ankita y Pratibha, el siguiente valor de rango se incrementa en 2, es decir, 3 para Swarna.
- función percent_rank()-
SELECT subjects, s_name, mark, percent_rank() OVER ( partition by subjects order by mark ) AS 'percent_rank' FROM result;
Producción-
Asignaturas Nombre Marca rango_porcentual inglés pratibha 70 0 inglés Ankita 90 0.5 inglés Svarna 100 1 Matemáticas Ankita sesenta y cinco 0 Matemáticas Svarna 85 0.5 Matemáticas pratibha 100 1 Ciencias Svarna 50 0 Ciencias pratibha 80 0.5 Ciencias Ankita 80 0.5 Explicación:
Aquí, la función percent_rank() calcula el rango percentil en orden ascendente por la columna «marca».
percent_rank se calcula usando la siguiente fórmula-
(rank - 1) / (rows - 1)
rank es el rango de cada fila de la partición resultante usando la función rank().
las filas representan el número de filas en esa partición.
Para borrar esta fórmula, considere la siguiente consulta:
SELECT subjects, s_name, mark, rank() OVER ( partition by subjects order by mark )-1 AS 'rank-1', count(*) over (partition by subjects)-1 AS 'total_rows-1', percent_rank() OVER ( partition by subjects order by mark ) AS 'percenr_rank' FROM result;
Producción-
Asignaturas Nombre Marca rango-1 total_filas-1 rango_porcentual inglés pratibha 70 0 2 0 inglés Ankita 90 1 2 0.5 inglés Svarna 100 2 2 1 Matemáticas Ankita sesenta y cinco 0 2 0 Matemáticas Svarna 85 1 2 0.5 Matemáticas pratibha 100 2 2 1 Ciencias Svarna 50 0 2 0 Ciencias Ankita 80 1 2 0.5 Ciencias pratibha 80 1 2 0.5
Nota: Al usar la función de clasificación, en la consulta de MySQL, el uso de la cláusula order by es obligatorio; de lo contrario, todas las filas se consideran pares, es decir (duplicados) y todas las filas se asignan al mismo rango, es decir, 1.
Publicación traducida automáticamente
Artículo escrito por Tanvi_Garg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA