La cláusula SQL GROUP BY es para consolidar valores similares en una sola fila. El grupo es un conjunto de columnas, el cual devuelve una sola fila de uno o más dentro de la consulta que tiene los mismos valores de columna. Su propósito principal es este trabajo junto con funciones, como SUM o COUNT, y proporcionar un medio para resumir valores.
¿Qué es un grupo SQL Server?
En SQL, los grupos son combinaciones únicas de valores de columna. Cuando una consulta tiene una clausula SQL GROUP BY, en lugar de devolver cada fila que cumple la condición de filtro, los valores se agrupan primero. Las filas devueltas son las combinaciones únicas dentro de las columnas.
La sintaxis general con SQL GROUP BY es:
SELECT columna1, función (columna2)
FROM tabla
GROUP BY columna1
Aquí puedes ver los inicios del grupo. El paso final es agregar una cláusula SQL GROUP BY a la instrucción para crear la agrupación.
Puede utilizar estas funciones para resumir los datos dentro de un grupo con SQL group by:
- COUNT(): devuelve el número de filas dentro del grupo.
- MIN() – Devuelve el valor mínimo encontrado dentro del grupo.
- MAX(): devuelve el valor máximo encontrado dentro del grupo.
- SUM() – Devuelve la suma del valor encontrado con el grupo.
- AVG() – Devuelve el valor promedio encontrado dentro del grupo (SUM() / COUNT() )
Ejemplo de uso SQL GROUP BY
Consideremos una tabla de “compras” que resume las ventas de una tienda:
identificación | cliente | costo | fecha |
---|---|---|---|
1 | Piedra | 104 | 2012-10-23 |
2 | Simón | 80 | 2012-10-27 |
3 | Marie | 18 | 2012-11-05 |
4 | Marie | 20 | 2012-11-14 |
5 | Piedra | 160 | 2012-12-03 |
Esta tabla contiene una columna que sirve como identificador de cada línea, otra que contiene el nombre del cliente, el costo de la venta y la fecha de compra.
Para obtener el costo total de cada cliente agrupando los pedidos de los mismos clientes, utilice la siguiente consulta:
SELECT cliente, SUM(costo)
FROM compras
GROUP BY cliente
La función SUM() se utiliza para sumar el valor de cada tarifa para el mismo cliente. El resultado será por tanto el siguiente:
cliente | SUMA (costo) |
---|---|
Piedra | 264 |
Simón | 80 |
Marie | 38 |
La forma sencilla de entender la clausula SQL GROUP BY es simplemente entender que evitará presentar las mismas líneas varias veces. Este es un método para evitar duplicados.
Solo como información, esto es lo que se obtiene de la consulta sin usar GROUP BY.
Consulta :
SELECT cliente, SUM(costo)
FROM compras
Resultado :
cliente | SUMA (tarifa) |
---|---|
Piedra | 264 |
Simón | 80 |
Marie | 38 |
Marie | 38 |
Piedra | 264 |
Ordenar resultados de agrupación
Los grupos no se devuelven en orden. Para hacer esto, debe incluir la cláusula ORDER BY. Agregue la cláusula SQL ORDER BY al final de la instrucción SQL.
SELECT cliente, SUM(costo)
FROM compras
GROUP BY cliente
ORDER BY cliente
HAVING y Sql GROUP BY
La cláusula HAVING filtra los grupos creados con la clausula SQL GROUP BY. La cláusula HAVING determina si un grupo está incluido dentro del resultado.
A diferencia de la cláusula WHERE que filtra registros individuales, la cláusula HAVING filtra grupos; sin embargo, tenga en cuenta que SQL que contiene un WHERE y HAVING procesa ambos!
En este caso, primero se procesa la cláusula WHERE y se filtran esos registros. A continuación, el HAVING se aplica a los grupos especificados en el GRUPO BY.
Normalmente, HAVING se usa con la clausula SQL GROUP BY, pero si no se incluye una cláusula GROUP BY, entonces HAVING opera en todo el conjunto de resultados como un grupo implícito.
Considere nuestro ejemplo anterior. Aquí calculamos los totales. Supongamos que necesitamos mostrar pedidos grandes, aquellos que suman más de $ 100. ¿Cómo podemos hacerlo?
SELECT cliente, SUM(costo)
FROM compras
GROUP BY cliente
HAVING SUM(costo)>100
ORDER BY cliente
Utilice la cláusula HAVING para filtrar en el SUM(costo).
Lo bueno de HAVIN
La ventaja clave de la cláusula HAVING es su capacidad para filtrar GRUPOS utilizando funciones agregadas. Esto es algo que no se puede hacer con una instrucción SELECT.