Conocimiento de las funciones de las ventanas

Conocimiento de las funciones de la ventana:

1. La posición de la <función de ventana> puede incluir las siguientes dos funciones:
1) Funciones de ventana dedicadas, incluyendo rango, rango_denso, número_de_fila y otras funciones de ventana dedicadas que se mencionarán más adelante.
2) Funciones agregadas, como suma promedio, recuento, máximo, mínimo, etc.

2. Uso
Debido a que las funciones de ventana operan sobre los resultados de cláusulas where o group by, en principio , las funciones de ventana solo se pueden escribir en cláusulas select .
En pocas palabras, la función de ventana tiene las siguientes funciones:
1) Tiene las funciones de agrupar y ordenar al mismo tiempo
2) No reduce el número de filas en la tabla original
3) La sintaxis es la siguiente:

<窗口函数> over (partition by <用于分组的列名>
                order by <用于排序的列名>)

En tercer lugar, las características especiales de la
función de ventana La función de ventana tiene la función de agrupar por cláusula y ordenar por cláusula que hemos aprendido antes. Entonces, ¿por qué usar funciones de ventana?
Esto se debe a que agrupar por cambia el número de filas en la tabla después de agrupar y resumir, y solo hay una categoría en una fila. Las funciones de partición y clasificación no reducirán el número de filas en la tabla original . Por ejemplo, lo siguiente cuenta el número de personas en cada clase.
Inserte la descripción de la imagen aquí
Es decir, la función de ventana tiene las siguientes funciones:

1) Tiene funciones de partición y orden por
2) No reduce el número de filas en la tabla original, por lo que a menudo se usa para clasificar dentro de cada grupo

4. Un ejemplo de una función de ventana especial:
Inserte la descripción de la imagen aquí
Tome la clase "1" como ejemplo. La nota "95" de esta clase ocupa el primer lugar y la clase "83" ocupa el cuarto lugar. El resultado anterior se clasifica de hecho de acuerdo con nuestros requisitos en cada clase.

select *,
   rank() over (partition by 班级
                 order by 成绩 desc) as ranking
from 班级表

Expliquemos la cláusula select en esta declaración SQL. El rango es una función de clasificación. El requisito es "rango por grado dentro de cada clase". Esta oración se puede dividir en dos partes:

1) Dentro de cada clase: la
partición por clase se utiliza para agrupar tablas. En este ejemplo, especificamos la agrupación "clase" (partición por clase)
2) Clasificación por calificación
La función de la cláusula order by es ordenar los resultados agrupados, el valor predeterminado es ordenar los resultados en orden ascendente (asc). En este ejemplo (orden por calificación, desc) se ordena por la columna de calificaciones, y se agrega la palabra clave desc para indicar el orden descendente.
A través de la siguiente figura, podemos entender el papel de la partición por (agrupamiento) y el orden por (clasificación dentro de un grupo).
Inserte la descripción de la imagen aquí
Se omite la cláusula de partición y la omisión significa que no se especifica la agrupación. Los resultados son los siguientes, pero los resultados se ordenan de mayor a menor:

select *,
   rank() over (order by 成绩 desc) as ranking,
   dense_rank() over (order by 成绩 desc) as dese_rank,
   row_number() over (order by 成绩 desc) as row_num
from 班级表

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
5. Función de agregación como función de
ventana. El uso de las funciones de agregación y de ventana es exactamente el mismo que el de la función de ventana dedicada mencionada anteriormente. Solo necesita escribir la función de agregación en la posición de la función de ventana, pero los paréntesis después de la función no pueden estar vacíos , debe especificar la agregación Nombre de la columna.

select *,
   sum(成绩) over (order by 学号) as current_sum,
   avg(成绩) over (order by 学号) as current_avg,
   count(成绩) over (order by 学号) as current_count,
   max(成绩) over (order by 学号) as current_max,
   min(成绩) over (order by 学号) as current_min
from 班级表

Inserte la descripción de la imagen aquí
Función de agregado como función de ventana, puedes ver intuitivamente en los datos de cada fila, a partir de los datos de esta fila, cuáles son los datos estadísticos (máximo, mínimo, etc.). Al mismo tiempo, puede ver el impacto de cada fila de datos en las estadísticas generales.

6. Escenarios de uso de la función de ventana
1) Requisitos comerciales "clasificación en cada grupo", como:
problema de clasificación: cada departamento clasifica
los primeros N por problema de rendimiento : busque los N mejores empleados en cada departamento para obtener una recompensa

Supongo que te gusta

Origin blog.csdn.net/weixin_46801232/article/details/108669820
Recomendado
Clasificación