Les funcions de finestra (o funcions de finestra analítica) són una característica poderosa de SQL que permet realitzar càlculs sobre un conjunt de files relacionades amb la fila actual. Aquestes funcions són molt útils per a tasques com càlculs acumulatius, classificacions i altres operacions que necessiten accedir a múltiples files en una taula.
Conceptes clau
Abans de començar amb les funcions de finestra, és important comprendre alguns conceptes clau:
- Partició: Un conjunt de files sobre les quals s'aplica la funció de finestra. És similar a un "grup" en les funcions d'agregació.
- Ordre: La seqüència en què es processen les files dins de cada partició.
- Marc de la finestra: Un subconjunt de files dins de la partició que es consideren per a cada fila en particular.
Sintaxi bàsica
La sintaxi general per a una funció de finestra és la següent:
<funció_de_finestra>() OVER ( [PARTITION BY <columna1>, <columna2>, ...] [ORDER BY <columna1> [ASC|DESC], <columna2> [ASC|DESC], ...] [ROWS BETWEEN <inici> AND <final>] )
Funcions de finestra comunes
ROW_NUMBER()
ROW_NUMBER()
Aquesta funció assigna un número únic a cada fila dins de la partició, començant per 1.
SELECT columna1, columna2, ROW_NUMBER() OVER (PARTITION BY columna1 ORDER BY columna2) AS fila_num FROM taula;
RANK()
RANK()
Aquesta funció assigna un rang a cada fila dins de la partició, amb files amb valors iguals rebent el mateix rang. Els rangs poden tenir salts.
SELECT columna1, columna2, RANK() OVER (PARTITION BY columna1 ORDER BY columna2) AS rang FROM taula;
DENSE_RANK()
DENSE_RANK()
Similar a RANK()
, però sense salts en els rangs.
SELECT columna1, columna2, DENSE_RANK() OVER (PARTITION BY columna1 ORDER BY columna2) AS rang_dens FROM taula;
SUM()
SUM()
Aquesta funció calcula la suma acumulativa de valors dins de la partició.
SELECT columna1, columna2, SUM(columna2) OVER (PARTITION BY columna1 ORDER BY columna2) AS suma_acumulativa FROM taula;
AVG()
AVG()
Aquesta funció calcula la mitjana acumulativa de valors dins de la partició.
SELECT columna1, columna2, AVG(columna2) OVER (PARTITION BY columna1 ORDER BY columna2) AS mitjana_acumulativa FROM taula;
Exemple pràctic
Suposem que tenim una taula vendes
amb les següents columnes: vendedor
, mes
i vendes
.
CREATE TABLE vendes ( vendedor STRING, mes INT64, vendes INT64 ); INSERT INTO vendes (vendedor, mes, vendes) VALUES ('Anna', 1, 100), ('Anna', 2, 150), ('Anna', 3, 200), ('Bernat', 1, 120), ('Bernat', 2, 180), ('Bernat', 3, 160);
Càlcul de la suma acumulativa de vendes per cada venedor
SELECT vendedor, mes, vendes, SUM(vendes) OVER (PARTITION BY vendedor ORDER BY mes) AS suma_acumulativa FROM vendes;
Resultat:
vendedor | mes | vendes | suma_acumulativa |
---|---|---|---|
Anna | 1 | 100 | 100 |
Anna | 2 | 150 | 250 |
Anna | 3 | 200 | 450 |
Bernat | 1 | 120 | 120 |
Bernat | 2 | 180 | 300 |
Bernat | 3 | 160 | 460 |
Exercicis pràctics
Exercici 1
Calcula el rang de vendes per cada venedor en cada mes.
SELECT vendedor, mes, vendes, RANK() OVER (PARTITION BY vendedor ORDER BY vendes DESC) AS rang_vendes FROM vendes;
Exercici 2
Calcula la mitjana acumulativa de vendes per cada venedor.
SELECT vendedor, mes, vendes, AVG(vendes) OVER (PARTITION BY vendedor ORDER BY mes) AS mitjana_acumulativa FROM vendes;
Conclusió
Les funcions de finestra són una eina poderosa per a l'anàlisi de dades en SQL. Permeten realitzar càlculs complexos de manera eficient i són essencials per a qualsevol analista de dades que treballi amb grans conjunts de dades. En el proper mòdul, explorarem altres tècniques avançades de SQL a BigQuery.
Curs de BigQuery
Mòdul 1: Introducció a BigQuery
- Què és BigQuery?
- Configurar el teu entorn de BigQuery
- Comprendre l'arquitectura de BigQuery
- Visió general de la consola de BigQuery
Mòdul 2: SQL bàsic a BigQuery
Mòdul 3: SQL intermedi a BigQuery
Mòdul 4: SQL avançat a BigQuery
- Unions avançades
- Camps niats i repetits
- Funcions definides per l'usuari (UDFs)
- Particionament i agrupament
Mòdul 5: Gestió de dades a BigQuery
- Carregar dades a BigQuery
- Exportar dades de BigQuery
- Transformació i neteja de dades
- Gestió de conjunts de dades i taules
Mòdul 6: Optimització del rendiment de BigQuery
- Tècniques d'optimització de consultes
- Comprendre els plans d'execució de consultes
- Ús de vistes materialitzades
- Optimització de l'emmagatzematge
Mòdul 7: Seguretat i compliment de BigQuery
Mòdul 8: Integració i automatització de BigQuery
- Integració amb serveis de Google Cloud
- Ús de BigQuery amb Dataflow
- Automatització de fluxos de treball amb Cloud Functions
- Programació de consultes amb Cloud Scheduler
Mòdul 9: Aprenentatge automàtic a BigQuery (BQML)
- Introducció a BigQuery ML
- Creació i entrenament de models
- Avaluació i predicció amb models
- Funcions avançades de BQML