Skip to content

Clase 17 – Funciones Agregadas Avanzadas

En SQL, las funciones agregadas van más allá de las típicas Count, Sum, Avg, Max y Min.

En esta clase, nos sumergiremos en funciones menos conocidas pero igualmente poderosas, explorando su sintaxis, casos de uso y cómo pueden llevar tu análisis de datos a un nivel superior.

Función GROUP_CONCAT: Concatenando Valores de Filas

La función GROUP_CONCAT se utiliza para concatenar los valores de una columna en un solo string, agrupados por una columna específica.

Supongamos que queremos obtener una lista de los productos comprados por cada cliente:

SELECT id_cliente, GROUP_CONCAT(nombre_producto) AS productos_comprados
FROM compras
GROUP BY id_cliente;

Esta consulta devolverá una lista concatenada de productos para cada cliente, facilitando la visualización de sus compras.

Función EVERY: Verificando Condiciones para Todas las Filas

La función EVERY evalúa si una condición es verdadera para todas las filas en un conjunto de datos.

Supongamos que queremos verificar si todos los productos en nuestra tabla tienen un precio superior a 50:

SELECT EVERY(precio > 50) AS todos_precio_alto
FROM productos;

El resultado será “true” si todos los productos tienen un precio superior a 50, y “false” en caso contrario.

Funciones ANY y SOME: Verificando Condiciones para Al Menos Una Fila

Las funciones ANY y SOME se utilizan para verificar si al menos una fila cumple con una condición. Supongamos que queremos saber si hay algún producto con un stock inferior a 10 unidades:

SELECT ANY(stock < 10) AS algun_producto_bajo_stock
FROM inventario;

El resultado será “true” si al menos un producto tiene un stock inferior a 10, y “false” en caso contrario.

Función EVERY con Subconsulta: Utilizando Condiciones Completas

La función EVERY se puede combinar con una subconsulta para evaluar condiciones más complejas.

Supongamos que queremos verificar si todos los empleados en el departamento de Ventas tienen un salario superior a 50000:

SELECT EVERY(salario > 50000) AS todos_ventas_salario_alto
FROM empleados
WHERE id_departamento = (SELECT id_departamento FROM departamentos WHERE nombre = 'Ventas');

Esta consulta utiliza una subconsulta para obtener el id_departamento de Ventas y luego evalúa si todos los empleados en ese departamento tienen un salario superior a 50000.

Función ARRAY_AGG: Agregando Valores en un Array

La función ARRAY_AGG se utiliza para agregar los valores de una columna en un array.

Supongamos que queremos obtener un array con todos los salarios de los empleados en un departamento:

SELECT id_departamento, ARRAY_AGG(salario) AS salarios_en_departamento
FROM empleados
GROUP BY id_departamento;

Esta consulta devolverá un array con los salarios de cada empleado en cada departamento.

Función STRING_AGG: Concatenando Valores con un Delimitador

La función STRING_AGG es similar a GROUP_CONCAT pero permite especificar un delimitador.

Supongamos que queremos obtener una lista de todos los nombres de productos separados por comas:

SELECT STRING_AGG(nombre_producto, ', ') AS lista_productos
FROM productos;

Esta consulta devolverá una lista de nombres de productos concatenados con comas como delimitador.

Función PERCENTILE_CONT: Calculando el Percentil Continuo

La función PERCENTILE_CONT se utiliza para calcular el percentil continuo de una columna en un conjunto de datos.

Supongamos que queremos conocer el salario correspondiente al percentil 75 en nuestra tabla de empleados:

SELECT PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY salario) AS salario_percentil_75
FROM empleados;

Esta consulta devolverá el salario que se encuentra en el percentil 75 de todos los salarios de empleados.

Función RANK: Asignando un Rango a Filas

La función RANK asigna un rango a cada fila en un conjunto de datos basándose en una columna específica.

Supongamos que queremos asignar un rango a los empleados en función de sus salarios:

SELECT nombre, salario, RANK() OVER (ORDER BY salario DESC) AS ranking_salario
FROM empleados;

Esta consulta devolverá el nombre, salario y el rango de cada empleado en función de sus salarios, ordenados de mayor a menor.

Función NTILE: Dividiendo Resultados en N Grupos

La función NTILE se utiliza para dividir un conjunto de datos en un número específico de grupos.

Supongamos que queremos dividir a los empleados en tres grupos en función de sus salarios:

SELECT nombre, salario, NTILE(3) OVER (ORDER BY salario) AS grupo_salario
FROM empleados;

Esta consulta devolverá el nombre, salario y el número de grupo al que pertenece cada empleado, dividiendo los salarios en tres grupos.

Función LEAD y LAG: Accediendo a Filas Adyacentes

Las funciones LEAD y LAG se utilizan para acceder a filas adyacentes en un conjunto de datos.

Supongamos que queremos conocer la diferencia de salario entre un empleado y el siguiente en función de su orden en la tabla:

SELECT nombre, salario, LEAD(salario) OVER (ORDER BY salario) - salario AS diferencia_salario_siguiente
FROM empleados;

Esta consulta devolverá el nombre, salario y la diferencia de salario entre cada empleado y el siguiente, ordenados por salario.


Explorar funciones agregadas más allá de Count, Sum, Avg, Max y Min en SQL proporciona herramientas poderosas para realizar análisis de datos avanzados.

Desde concatenar valores y evaluar condiciones complejas hasta asignar rangos y acceder a filas adyacentes, estas funciones amplían tu capacidad de extraer información significativa de tus bases de datos.