Función de ventana @sql aprendizaje

 

[Enlace de referencia] https://zhuanlan.zhihu.com/p/98655285

 

función de ventana mysql8.0+

La función de ventana también se denomina función OLAP (Procesamiento analítico en línea)

1. La estructura gramatical de la función de ventana:

 #Palabra clave: Partición por y orden por

< función de ventana > sobre ([PARTICIÓN por < lista de columnas >]    

                     Ordenar por < lista de columnas para ordenar > )  

Hay dos tipos de funciones de ventana:

a. Funciones de agregación que se pueden usar como funciones de ventana: (sum, avg, count, max, min)

B. Función de ventana especial: (Rank, Dense_Rank, Row_Number)

 

【1】Realizar efecto de clasificación de grupo

[2] Dos preguntas, una es seleccionar al cliente con mayor puntaje, y la otra es seleccionar el mayor puntaje de cada usuario

 

2. Uso de funciones de ventana dedicadas

a) Cómo usar

La función Rank es una función que registra el orden de clasificación. La partición por se usa para agrupar el conjunto de resultados. Si no se especifica, trata todo el conjunto de resultados como un grupo. La diferencia entre esta y la función de agregación y groupby es que puede devolver varios elementos en un grupo de registros, y las funciones agregadas generalmente tienen solo un registro que refleja valores estadísticos.

-- 查看表
SELECT * FROM product;

-- Organice los 8 tipos de productos en la tabla de acuerdo con el tipo de producto y el precio de venta de acuerdo con el número de serie

# En la declaración, PARTITION By especifica el rango de objetos que se ordenarán (tablas de agrupación horizontal),

# order by especifica qué columna y qué orden organizar (definir verticalmente las reglas de clasificación).

-- 指定partition by 的字段
SELECT product_id,product_name,product_type,sale_price,
rank() over (PARTITION BY product_type ORDER BY sale_price ASC ) as '排序'
FROM product

-- ¿Cómo funcionaría sin PARTITION By?

# Configure el grupo de funciones PARTICIÓN Por como un elemento silencioso

select product_id,product_name,product_type,sale_price,
rank() over (order by sale_price asc)  as '排序'
from product

Los resultados son los siguientes: 1) La visualización de datos no se agrupa y se ordena directamente por precio_de_venta

2) Cuando los precios están empatados, los resultados de clasificación son consistentes y el valor del conteo de clasificación es +1;

 

b) Diferencia de función

Hay tres tipos de funciones de ventana dedicadas mencionadas anteriormente: Rango, Dense_Rank, Row_Number, ¿cuál es la diferencia entre estos tres?

#Los siguientes resultados de clasificación de las tres funciones se definen como clasificación 1, clasificación 2 y clasificación 3, y los resultados se muestran:

select product_id,product_name,product_type,sale_price,
rank() over  (order by sale_price asc)  as '排序1',
dense_rank() over  (order by sale_price asc)  as '排序2',
row_number() over  (order by sale_price asc)  as '排序3'
from product

 

Al comparar la clasificación 1 con la clasificación 2, se puede ver que cuando la función dense_rank calcula el resultado de la yuxtaposición, el valor de la yuxtaposición no ocupa un lugar, y cuando hay dos posiciones consecutivas del número 3, el resultado del conteo posterior sigue siendo 4;

Comparando la clasificación 2 y la clasificación 3, se puede ver que el número de fila calculará un valor único independientemente de si el valor del precio de venta es consistente o no, y no calculará valores continuos.

 

c) función agregada como función de ventana

Las funciones de agregación como (sum, avg, count, max, min) se pueden hacer referencia a la función de ventana:

Uso de funciones agregadas #sum

select product_id,product_name,product_type,sale_price,
sum(sale_price) over  (order by product_id)  as '累加'
from product

Se puede ver que cuando se acumulan los resultados anteriores, se acumula sale_price y la suma acumulada de los resultados anteriores se calcula en la clasificación 1. Los datos de la tabla se organizan en orden por product_id, de manera similar, la función AVG calculará el valor medio del valor acumulado.

Sugerencias: la función de agregación se usa como una función de ventana, que no es tan simple como ordenar, se puede acumular, se puede acumular y promediar

d) Garantizar el orden de los resultados ordenados

Al ordenar de acuerdo con los resultados anteriores, a veces los resultados de la ordenación no están ordenados y puede usar el orden doble para ordenarlos en orden:

# Organizar los resultados del cálculo de nuevo

select product_id,product_name,product_type,sale_price,
rank() over  (order by sale_price )  as '排序1'
from product
order by 排序1 desc

 

-- 按 product_type 统计总金额,及其各产品金额占比
-- 按 product_type 统计金额由小到大进行累计,
SELECT product_id, product_name, product_type, sale_price
	, sum(sale_price) over(PARTITION BY product_type) as typeSum
	, sale_price / sum(sale_price) over(PARTITION BY product_type) as ratioInType
	, sum(sale_price) over(PARTITION BY product_type ORDER BY sale_price) as orderCumsum
FROM product ORDER BY product_type, sale_price;

Supongo que te gusta

Origin blog.csdn.net/Cameback_Tang/article/details/108247673
Recomendado
Clasificación