Funciones agregadas de cadenas SQL

Funciones Agregadas De Cadenas Sql



Si alguna vez ha trabajado con bases de datos SQL, probablemente esté familiarizado con las funciones agregadas. Son esencialmente un conjunto de funciones que realizan cálculos sobre un conjunto de valores y devuelven un único resultado.

Un ejemplo incluye funciones como SUM(), AVG(), COUNT(), MAX y MIN(). Sin embargo, una cosa que notará acerca de las funciones agregadas en SQL es que están orientadas a operaciones numéricas.

¿Pero sabías que existen funciones agregadas que se ocupan de valores de cadena? En este tutorial, veremos estas funciones, cómo funcionan y cómo podemos usarlas en nuestras bases de datos.







NOTA: Es una buena nota que la mayoría de las funciones que se analizan en esta publicación no forman parte del SQL estándar. Como resultado, son una extensión de varios motores de bases de datos como PostgreSQL, SQL Server, etc.



¿Qué son las funciones agregadas de cadenas?

Las funciones agregadas de cadenas son un conjunto de funciones que realizan operaciones de agregación en un conjunto de cadenas dentro de un grupo o filas y devuelven un único resultado.



Usamos principalmente estas funciones con la cláusula GROUP BY para agrupar las filas según una determinada columna y luego agregar las cadenas en cada grupo.





Algunas funciones comunes de agregado de cadenas incluyen:

  • GROUP_CONCAT() – PostgreSQL y MySQL
  • STRING_AGG – Servidor SQL
  • ARRAY_AGG – PostgreSQL
  • LISTAGG – Oráculo

Exploremos cada función y lo que proporciona.



GRUPO_CONCAT()

La función GROUP_CONCAT() es compatible con las bases de datos PostgreSQL y MySQL. Nos permite concatenar los valores de varias filas en una sola cadena.

Supongamos que tenemos una tabla de 'empleados' de la siguiente manera:

CREAR TABLA empleados (
empleado_id INT AUTO_INCREMENT CLAVE PRIMARIA,
nombre_nombre VARCHAR(50),
apellido VARCHAR(50),
departamento VARCHAR(50)
);

INSERTAR EN empleados (nombre, apellido, departamento) VALORES
('Alice', 'Smith', 'Recursos Humanos'),
('Bob', 'Johnson', 'Marketing'),
('Charlie', 'Wilson', 'Finanzas'),
('David', 'Brown', 'Ventas'),
('Eva', 'Davis', 'Ingeniería');

Producción:

Si queremos determinar el nombre completo del empleado tomando el nombre y concatenándolo con el apellido, podemos usar la función GROUP_CONCAT() como se demuestra en el siguiente ejemplo:

SELECCIONAR
departamento,
GROUP_CONCAT(nombre, ' ', apellido) AS nombre completo
DE
empleados
AGRUPAR POR
departamento;

En este caso, usamos la función para concatenar las cadenas de las columnas 'primer_nombre' y 'apellido', y una cadena vacía para agregar un espacio a los nombres.

Contiene una lista de empleados de cada departamento.

STRING_AGG

Esta función es similar a la función GROUP_CONCAT() pero solo se admite en la base de datos de SQL Server.

Un ejemplo de uso es el siguiente:

SELECCIONAR
departamento,
STRING_AGG(nombre, apellido, ' ') AS nombre completo
DE
empleados
AGRUPAR POR
departamento;

Esto realiza la concatenación de cadenas en las columnas especificadas como espacio como delimitador.

ARRAY_AGG

La función ARRAY_AGG solo está disponible en la base de datos PostgreSQL. Nos permite agregar los valores en una sola matriz.

Un ejemplo es el siguiente:

SELECCIONAR
departamento,
ARRAY_AGG(primer_nombre) AS lista_de_empleados
DE
empleados
AGRUPAR POR
departamento;

Esto debería agregar el nombre del empleado como una matriz.

LISTAGG()

La función LISTAGG() sólo está disponible en la base de datos Oracle. Nos permite concatenar los valores en una sola cadena con un delimitador específico.

Un ejemplo es el siguiente:

SELECCIONAR departamento, LISTAGG(nombre, apellido,  ' ') DENTRO DEL GRUPO (ORDENAR POR nombre_empleado ASC) COMO empleados
DE empleados
Agrupar por departamento;

Esto concatena los nombres de los empleados y el delimitador especificado.

Conclusión

En este tutorial, aprendimos sobre las funciones de agregación de cadenas que nos permiten proporcionar una lista de valores de cadena y realizar una operación en un único valor de cadena resultante.