Sentencia GROUP BY y funciones agregadas en SQL
Las funciones agregadas, son funciones que permiten realizar operaciones sobre un conjunto de resultados devolviendo un solo valor agregado. A menudo, son utilizadas junto a la cláusula GROUP BY
.
COUNT
La función COUNT
, como el resto de funciones agregadas, se coloca siempre en el SELECT
delante del FROM
. Se utiliza para contar el número de registros. Si no lleva ninguna condición devolvería el número total de registros.
SELECT COUNT(*) totalClientes
FROM Clientes;
totalClientes |
---|
7 |
El resultado de la sentencia nos indica que la tabla Clientes
consta de un total de 7 registros en la actualidad.
El uso de funciones agregadas no deja exenta la utilización del resto de cláusulas de una SELECT
. Además, no están limitadas a una única función por sentencia, pudiéndose aplicar varias en una misma consulta.
A continuación, veremos otro ejemplo sencillo sobre la tabla Pedidos
:
SELECT COUNT (producto) AS totalAlexa
FROM Pedidos
WHERE producto LIKE '%ECHO%';
totalAlexa |
---|
2 |
El resultado nos indica que la tabla Pedidos
contine dos registros de dispositivos Alexa ECHO.
En las funciones agregadas, es recomendable utilizar siempre un alias para la definición de las columnas que guarden dichos valores del conjunto de resultados.
MAX
La función MAX
devuelve el valor máximo del campo especificado:
SELECT MAX(precio) precioMaximo
FROM Pedidos;
precioMaximo |
---|
2449,5 |
Esta consulta nos indica que nuestro producto
más caro de la tabla Pedidos
tiene un valor de: 2449,50 euros.
MIN
La función MIN
devuelve el valor mínimo del campo especificado:
SELECT MIN(precio) precioMinimo
FROM Pedidos;
precioMinimo |
---|
39,99 |
Esta consulta nos indica que nuestro producto
más barato de la tabla Pedidos
tiene un valor de: 39,99 euros.
SUM
La función SUM
devuelve el valor total de la suma de una columna. Esta función es solo aplicable a campos numéricos siendo los valores NULL
ignorados.
SELECT SUM(totalPrecio) beneficio
FROM Pedidos;
beneficio |
---|
17251,6 |
A través de esta consulta accedemos rápidamente al resultado final de la suma de todos los precios totales de la tabla Pedidos
.
AVG
La función AVG
devuelve el valor promedio del campo especificado. Esta función es solo aplicable a campos numéricos siendo los valores NULL
ignorados.
SELECT AVG(precio) precioPromedio
FROM Pedidos;
precioPromedio |
---|
610,73875 |
Esta consulta nos indica el valor del precio promedio de la tabla Pedidos.
Para acceder a más información sobre funciones agregadas, podéis visitar la documentación de Microsoft.
GROUP BY
La cláusula GROUP BY
se utiliza para agrupar los resultados de acuerdo a la columna seleccionada, devolviendo una fila de resultados para cada grupo de dicha columna.
GROUP BY
se utiliza a menudo junto a funciones agregadas.
En cuanto a la sintaxis, la cláusula GROUP BY
se sitúa al final de la sentencia después del WHERE
, pero antes del ORDER BY
en caso de aplicarse ambas cláusulas.
En primer lugar, ejecutamos la siguiente SELECT
de ejemplo sin añadir cláusula GROUP BY
:
SELECT C.idClientes,
C.nombre,
C.apellidos
FROM Clientes C
INNER JOIN Pedidos P
ON C.idClientes = p.idClientes
ORDER BY C.idClientes ASC;
idClientes | nombre | apellidos |
---|---|---|
1 | Fernando | García Rodriguez |
2 | María | Lopez ruiz |
2 | María | Lopez ruiz |
3 | Ana | Fernandez Montero |
4 | Luis | Sanchez García |
4 | Luis | Sanchez García |
5 | Alejandro | Valero Martinez |
Al establecerse una relación INNER JOIN
entre la tabla Clientes
y Pedidos
, está SELECT
nos permite ver que Clientes han realizado algún pedido, estando por ende, el idClientes
presente en la tabla Pedidos
tantas veces como pedidos realizados.
Ahora, lanzamos la misma consulta con GROUP BY
para ver la diferencia en el resultado de ejecución:
SELECT C.idClientes,
C.nombre,
C.apellidos
FROM Clientes C
INNER JOIN Pedidos P
ON C.idClientes = p.idClientes
GROUP BY C.idClientes,
C.nombre,
C.apellidos
ORDER BY C.idClientes ASC;
idClientes | nombre | apellidos |
---|---|---|
1 | Fernando | García Rodriguez |
2 | María | Lopez ruiz |
3 | Ana | Fernandez Montero |
4 | Luis | Sanchez García |
5 | Alejandro | Valero Martinez |
Observamos que ahora ha agrupado los registros de mismo valor, eliminando la duplicidad en la consulta.
Como ya hemos mencionado anteriormente, GROUP BY
se utiliza a menudo junto a funciones agregadas para ampliar la información devuelta en la consulta:
SELECT C.idClientes,
C.nombre,
C.apellidos,
COUNT (*) numeroPedidos,
SUM (totalPrecio) gastoTotalCliente
FROM Clientes C
INNER JOIN Pedidos P
ON C.idClientes = p.idClientes
GROUP BY C.idClientes,
C.nombre,
C.apellidos;
idClientes | nombre | apellidos | numeroPedidos | gastoTotalCliente |
---|---|---|---|---|
1 | Fernando | García Rodriguez | 1 | 2449,5 |
2 | María | Lopez ruiz | 2 | 3199,78 |
3 | Ana | Fernandez Montero | 1 | 4304,25 |
4 | Luis | Sanchez García | 2 | 4999 |
5 | Alejandro | Valero Martinez | 1 | 899,97 |
Gracias a las funciones agregadas, podemos observar el número de pedidos
realizados por cada cliente
y el gastoTotal de acuerdo al número de pedidos
realizados.