DENSE_RANK EN MYSQL: CÓMO USARLA CON EJEMPLOS
La función rank de mysql. se engloba dentro de lo que son las funciones ventana de mysql y es similar a la función rank en mysql.Esta función 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 que tienen valores iguales reciben la misma clasificación. La función DENSE RANK se diferencia de la función RANK en el que si se vinculan dos o más filas, no hay brecha en la secuencia de valores clasificados.
En el siguiente ejemplo, se divide la tabla según sellerid, se ordena cada partición según la cantidad y se asigna una clasificación densa a cada fila. Los resultados se ordenan después de que se apliquen los resultados de la función de ventana.
SELECT salesid, qty,
DENSE_RANK() OVER(ORDER BY qty DESC) AS d_rnk,
RANK() OVER(ORDER BY qty DESC) AS rnk
FROM winsales
ORDER BY 2,1;
+---------+-----+-------+-----+
| salesid | qty | d_rnk | rnk |
+---------+-----+-------+-----+
|10001 | 10 | 5 |8 |
|10006 | 10 | 5 |8 |
|30001 | 10 | 5 |8 |
|40005 | 10 | 5 |8 |
|30003 | 15 | 4 |7 |
|20001 | 20 | 3 |4 |
|20002 | 20 | 3 |4 |
|30004 | 20 | 3 |4 |
|10005 | 30 | 2 |2 |
|30007 | 30 | 2 |2 |
|40001 | 40 | 1 |1 |
+---------+-----+-------+-----+
SELECT salesid, sellerid, qty, buyerid,
DENSE_RANK() OVER(PARTITION BY buyerid, sellerid ORDER BY qty DESC) AS d_rnk,
RANK() OVER (PARTITION BY buyerid, sellerid ORDER BY qty DESC) AS rnk
FROM winsales
ORDER BY rnk;
+---------+----------+-----+---------+-------+-----+
| salesid | sellerid | qty | buyerid | d_rnk | rnk |
+---------+----------+-----+---------+-------+-----+
|20001 |2 | 20 | b | 1 |1 |
|30007 |3 | 30 | c | 1 |1 |
|10006 |1 | 10 | c | 1 |1 |
|10005 |1 | 30 | a | 1 |1 |
|20002 |2 | 20 | c | 1 |1 |
|30009 |3 | 20 | b | 1 |1 |
|40001 |4 | 40 | a | 1 |1 |
|30004 |3 | 20 | b | 1 |1 |
|10001 |1 | 10 | c | 1 |1 |
|40005 |4 | 10 | a | 2 |2 |
|30003 |3 | 15 | b | 2 |3 |
|30001 |3 | 10 | b | 3 |4 |
+---------+----------+-----+---------+-------+-----+