Skip to content

Funciones de agregación de SQL explicadas

Funciones de agregación de SQL, GROUP BY, HAVING y agregados distintos/avanzados, con su valor de retorno y un ejemplo de una línea sobre una tabla de pedidos.

Las funciones de agregación colapsan muchas filas en un único resultado escalar. GROUP BY particiona las filas por clave antes de agregar. HAVING filtra los grupos después de la agregación. Toda función de agregación omite los valores NULL de entrada, salvo COUNT(*).

Tabla de referencia · 29 entradas
29 of 29 rows
Escalares
Recuento de valores de entrada no nulos; COUNT(*) cuenta todas las filas.SELECT COUNT(*) FROM orders
Suma de los valores numéricos no nulos. Devuelve NULL con un conjunto vacío.SELECT SUM(total) FROM orders
Media aritmética de los valores numéricos no nulos. Ignora los NULL de entrada.SELECT AVG(total) FROM orders
El valor no nulo más pequeño de cualquier tipo comparable.SELECT MIN(total) FROM orders
El valor no nulo más grande de cualquier tipo comparable.SELECT MAX(total) FROM orders
Agrupación
Particiona las filas de entrada por clave; los agregados se calculan por partición.SELECT user_id, SUM(total) FROM orders GROUP BY user_id
Predicado evaluado por grupo tras la agregación. Sustituye a WHERE para agregados.SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
Varios agregados calculados por grupo en una sola pasada.SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
Calcula varias agrupaciones en una sola sentencia; las claves fuera del conjunto actual devuelven NULL.SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
Abreviatura de conjuntos de agrupación jerárquicos; añade subtotales y un total general.SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
Abreviatura de todas las combinaciones de las claves indicadas como conjuntos de agrupación.SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
Mezcla claves de agrupación simples con conjuntos de agrupación en una sola cláusula.SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
Conserva la primera fila por clave según el orden. Extensión de Postgres.SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Distintos y avanzados
Recuento de valores no nulos únicos. Elimina duplicados primero.SELECT COUNT(DISTINCT user_id) FROM orders
Estima el recuento de valores distintos con error acotado; pensada para entradas grandes.SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
Concatena cadenas no nulas con un delimitador.SELECT STRING_AGG(user_id::text, ',') FROM orders
Concatena cadenas no nulas; el nombre de STRING_AGG en MySQL.SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
Reúne los valores de entrada no nulos en un array.SELECT ARRAY_AGG(total) FROM orders
Reúne las filas de entrada en un array JSON; la forma JSONB almacena binario ya analizado.SELECT JSONB_AGG(user_id) FROM orders
TRUE cuando todos / algún valor de entrada no nulo es verdadero.SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
Alias estándar de BOOL_AND.SELECT EVERY(total > 0) FROM orders
Percentil interpolado / de rango más cercano sobre la entrada ordenada; requiere WITHIN GROUP.SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
Valor de entrada más frecuente; un agregado de conjunto ordenado en Postgres.SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
Pasa el criterio de ordenación a los agregados de conjunto ordenado e hipotético.SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
Restringe el agregado a las filas que cumplen la condición.SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
Ordena los valores antes de que el agregado los una o recoja.SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
COUNT(*) y COUNT(1) cuentan todas las filas; COUNT(col) omite los NULL de entrada.SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
Desviación estándar muestral de los valores numéricos no nulos. STDDEV_POP da la forma poblacional; el valor por defecto del nombre simple varía según el motor.SELECT STDDEV(total) FROM orders
Varianza muestral de los valores numéricos no nulos (el cuadrado de STDDEV). VAR_SAMP y VAR_POP nombran cada forma.SELECT VARIANCE(total) FROM orders