Funciones de agregación
Parte de la sección Fundamentos del Journey de SQL de Coddy. Lección 68 de 72.
Con OVER (ORDER BY ...), las funciones de agregación como AVG() o MAX() se calculan sobre las filas hasta la fila actual, incluidas las filas que empatan con ella en el valor de ORDER BY. Sin ORDER BY dentro de OVER, se calculan sobre todas las filas, por lo que cada fila obtiene el mismo valor.
Por ejemplo, podríamos calcular los ingresos máximos que obtuvimos hasta cada período final:
| mes | ingresos | región |
| 4 | 40 | East |
| 5 | 20 | East |
| 6 | 60 | West |
| 7 | 55 | West |
| 8 | 61 | East |
SELECT month, revenue, MAX(revenue) OVER (ORDER BY month ASC) as max_revenue
from table1Esto devolverá:
| mes | ingresos | max_revenue |
| 4 | 40 | 40 |
| 5 | 20 | 40 |
| 6 | 60 | 60 |
| 7 | 55 | 60 |
| 8 | 61 | 61 |
Para los meses 4 y 5, los ingresos máximos son 40; para los meses 6 y 7, son 60; y para el mes 8, son 61. Esto se debe a que, cuando encuentra unos ingresos mayores, descarta los anteriores y usa los más altos hasta ese momento.
Para la función AVG(), se verá así:
SELECT month, revenue, AVG(revenue) OVER (ORDER BY month ASC) as avg_revenue
from table1| mes | ingresos | avg_revenue |
| 4 | 40 | 40 |
| 5 | 20 | 30 |
| 6 | 60 | 40 |
| 7 | 55 | 43.75 |
| 8 | 61 | 47.2 |
También podemos agrupar nuestros cálculos por categorías específicas usando PARTITION BY. Por ejemplo:
SELECT month, revenue, region,
MAX(revenue) OVER (PARTITION BY region ORDER BY month ASC) as max_revenue
FROM table1Nos daría:
| mes | ingresos | región | max_revenue |
| 4 | 40 | East | 40 |
| 5 | 20 | East | 40 |
| 6 | 60 | West | 60 |
| 7 | 55 | West | 60 |
| 8 | 61 | East | 61 |
Ahora, el máximo se calcula por separado para cada región. Las regiones Este y Oeste mantienen sus propios máximos acumulados de forma independiente.
Desafío
FácilTablas y columnas disponibles:
books:book,page,words
Para cada libro, muestra el nombre del libro, el total de páginas, el número de palabras en cada página y calcula:
- El número máximo de palabras encontrado en cualquier página de ese libro
- El número promedio de palabras por página en todo el libro
- La diferencia entre las palabras de la página actual y el promedio de palabras por página del libro
Muestra los resultados ordenados por libro y número de página.
Devuelve las siguientes columnas:
bookpagewordsmax_words_in_bookavg_words_per_pagediff_from_avg
Pruébalo tú mismo
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Más palabras clave
La palabra clave INLa palabra clave BETWEENLa palabra clave LIKELa palabra clave ASRepaso: modelos de teléfonos móviles2Condiciones
Conceptos básicos de las condicionesLa palabra clave ANDLa palabra clave ORLa palabra clave NOTCombinación de múltiples condicionesParéntesisBooleanos5Operaciones aritméticas
Operadores matemáticosColumnas matemáticasLa operación móduloLa función ROUND()3Formato de retorno específico
Valores nulosOrdenar resultados Parte 1Ordenar resultados Parte 2Repaso: empresa de ciberseguridadLimitar el número de registrosRepaso: fábrica de vehículos6Retos introductorios
Repaso - Elecciones parlamentariasRepaso - Detención policial de un criminalRepaso - Envase de bebidas de barRepaso - Diseñar nuevas columnas9Varias tablas
JOIN básico, parte 1JOIN básico, parte 2Repaso: JOINAuto JOINRepaso: auto JOINUNIONSimplificar consultas: palabra clave WITHRepaso: consultas con WITHRepaso: contratista inmobiliario12Funciones de ventana, parte 2
Funciones RANK y DENSE_RANKRepaso: RANK y DENSE_RANKFunción NTILEFunciones de agregaciónCriterios ROWS y RANGEPractica por tu cuenta: Playground de SQL