Una cláusula PARTITION BY se usa para dividir las filas de la tabla en grupos. Es útil cuando tenemos que realizar un cálculo en filas individuales de un grupo usando otras filas de ese grupo.
- Siempre se usa dentro de la cláusula OVER().
- La partición formada por la cláusula de partición también se conoce como Ventana .
- Esta cláusula funciona solo en funciones de Windows. Como- RANGO(), LEAD(), LAG() etc.
- Si esta cláusula se omite en la cláusula OVER(), la tabla completa se considera como una única partición.
Sintaxis:
La sintaxis para la cláusula de partición es-
Window_function ( expression ) Over ( partition by expr [order_clause] [frame_clause] )
Aquí, order_clause y frame_clause son opcionales.
expr pueden ser nombres de columna o funciones integradas en MySQL.
Pero, el SQL estándar solo permite nombres de columna en expr.
Ejemplos:
Consideremos, una tabla “ Hacker ”:
escondido | h_nombre | reto_id | puntaje |
---|---|---|---|
3 | shubh | 111 | 20 |
2 | ayush | 111 | 80 |
5 | Krithik | 112 | 40 |
5 | Krithik | 114 | 90 |
4 | tushar | 112 | 30 |
1 | parte | 112 | 40 |
Tenemos que encontrar el rango de hackers en cada desafío. Eso significa que tenemos que enumerar todos los piratas informáticos que participaron en un desafío junto con su rango en ese desafío.
Consulta:
select challenge_id, h_id, h_name, score, dense_rank() over ( partition by challenge_id order by score desc ) as "rank", from hacker;
Explicación:
En la consulta anterior, la partición por cláusula dividirá la tabla en grupos que tienen el mismo desafío_id.
order by ordenará los hackers de cada partición en orden descendente por «puntuaciones».
La cláusula over() define cómo particionar y ordenar las filas de la tabla, que debe ser procesada por la función de ventana rank().
dense_rank() es una función de ventana, que asignará rango en una partición ordenada de desafíos. Si dos piratas informáticos tienen las mismas puntuaciones, se les asignará el mismo rango.
Producción:
reto_id | escondido | h_nombre | puntaje | rango |
---|---|---|---|---|
111 | 2 | ayush | 80 | 1 |
111 | 3 | shubh | 20 | 2 |
112 | 5 | Krithik | 40 | 1 |
112 | 1 | parte | 40 | 1 |
112 | 4 | tushar | 30 | 2 |
114 | 5 | Krithik | 90 | 1 |
Por lo tanto, obtenemos una lista de todos los piratas informáticos junto con sus rangos en los desafíos individuales.
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