Introducción a la cláusula GROUP BY en SQL
Para los casos en los que necesitamos agrupar las filas con el mismo valor, la cláusula Group By aparece en la imagen. La cláusula GROUP BY es un comando en SQL que realizará esta operación.
El punto importante a recordar aquí es que la cláusula GROUP BY se usa en la instrucción SELECT en la consulta después de usar la cláusula WHERE.
Sintaxis
La sintaxis para la cláusula Group By es:
SELECT column_name1, column_name2, …
FROM table_name
WHERE conditions
GROUP By column_name1, column_name2, …
ORDER By column_name1, column_name2, …;
Explicación de la sintaxis
- Instrucción SELECT - consulta de comando SQL
- nombre_tabla: el nombre de la tabla de la base de datos a la que se hace referencia
- condiciones: consulte las condiciones a comprobar
- GROUP BY - cláusula para agrupar las mismas filas juntas
- ORDER BY: siempre se usa después de la cláusula Group By para organizar las filas en orden ascendente o descendente. Esta es una condición opcional.
¿Cómo funciona la cláusula GROUP BY en SQL?
Para entender el funcionamiento de la cláusula Group By, tomemos la ayuda de un ejemplo. Considere una tabla con nombre como EMPLEADO que contiene los detalles básicos del empleado, como nombre, edad, número de teléfono, fecha de nacimiento, sexo, dirección, identificación de correo electrónico, etc.
Mesa de empleados
nombre | años | teléfono | género | correo electrónico |
John | 23 | 123 | Masculino | |
Mayo | 22 | 456 | Hembra | |
Ana | 45 | 644 | Hembra | |
Ollas | 57 | 3456 | Hembra | |
Res | 45 | 456 | Hembra | |
Bronceado | 78 | 2456 | Masculino | |
Corrió | 34 | 5899 | Masculino | |
Pálido | 55 | 7789 | Hembra | |
Tung | 32 | 5689 | Masculino | |
Chung | 21 | 4678 | Masculino |
Tenga en cuenta que el EMPLEADO tiene alrededor de 10 entradas.
Primero obtengamos los diferentes valores de "género" de esta tabla. La consulta que nos ayudará a alcanzar nuestro objetivo sería:
SELECT gender FROM EMPLOYEE;
Esto nos dará los siguientes valores:
género |
Masculino |
Hembra |
Hembra |
Hembra |
Hembra |
Masculino |
Masculino |
Hembra |
Masculino |
Masculino |
El problema aquí es la redundancia de los valores, es decir, como podemos ver, solo hay dos valores únicos de género en la tabla, pero la salida no solo nos da los valores únicos, sino todos los valores, incluso si son repetitivos.
Entonces, para obtener solo los valores únicos de la tabla, utilizaremos la siguiente consulta:
SELECT gender FROM EMPLOYEE GROUP BY gender;
El resultado que recibamos después de ejecutar esta consulta será:
género |
Masculino |
Hembra |
Agrupar por agrupará todos los mismos valores en las filas y devolverá una sola entrada o una sola fila para ellos, como lo hizo con las filas "Hombre" y "Mujer" en la tabla. Esto dio como resultado solo dos valores únicos que estaban presentes en la columna "género" i, e. Femenino y masculino.
Ahora, tomemos otro ejemplo de una tabla que contiene los detalles del departamento al que está asociado cada uno de estos empleados. Llamaremos a esto una tabla Employee_Department.
Mesa del departamento de empleados
nombre | capacho | Departamento |
John | hod1 | Servicio |
Mayo | hod2 | Finanzas |
Ana | hod1 | Servicio |
Ollas | hod2 | Finanzas |
Res | hod3 | Tecnología |
Bronceado | hod5 | Apoyo |
Corrió | hod3 | Servicio |
Pálido | hod3 | Tecnología |
Tung | hod3 | Finanzas |
Chung | hod5 | HORA |
Así que ahora ejecutemos la consulta a continuación y busquemos el resultado:
SELECT hod, department FROM Employee_Department GROUP BY hod, department;
La ejecución de esta consulta obtiene el siguiente resultado:
capacho | Departamento |
hod1 | Servicio |
hod2 | Finanzas |
hod3 | Tecnología |
hod5 | Apoyo |
hod3 | Servicio |
hod3 | Finanzas |
hod5 | HORA |
La cláusula GROUP BY funciona tanto en hod como en el departamento para buscar las filas únicas en el escenario mencionado anteriormente. Verificará la combinación de hod y departamento contra otras entradas de hod y departamento para identificar su singularidad. Si el hod es el mismo pero el departamento es diferente, entonces esa fila se trata como única. Si el hod y el departamento son iguales para más de una fila, entonces la entrada duplicada no se crea y solo se muestra una fila.
Operaciones de cláusula GROUP BY
Podemos usar la cláusula Group By con varias funciones de agrupación y agregación. Tomemos algunos ejemplos utilizando las dos tablas mencionadas anteriormente, es decir, EMPLEADO y Employee_Department.
Ejemplo 1
Obtener el recuento de empleados y empleadas en la empresa.
SELECT gender, COUNT(`name`) FROM EMPLOYEE GROUP BY gender;
La ejecución de esta consulta obtiene el siguiente resultado:
COUNT ('nombre') | género |
5 5 | Masculino |
5 5 | Hembra |
Ejemplo # 2
Obtener el recuento de departamentos de la empresa en orden descendente del recuento.
SELECT department, COUNT(`name`) FROM Employee_Department GROUP BY department ORDER BY COUNT(name) DESC;
La ejecución de esta consulta obtiene el siguiente resultado:
COUNT ('nombre') | Departamento |
3 | Servicio |
3 | Finanzas |
2 | Tecnología |
1 | Apoyo |
1 | HORA |
Ejemplo # 3
Obtener el recuento de diferentes departamentos bajo la misma dirección en la empresa en orden descendente del recuento.
SELECT hod, department, COUNT(`name`) FROM Employee_Department GROUP BY hod, department ORDER BY COUNT(name) DESC;
La ejecución de esta consulta obtiene el siguiente resultado:
COUNT ('nombre') | capacho | Departamento |
2 | hod1 | Servicio |
2 | hod2 | Finanzas |
2 | hod3 | Tecnología |
1 | hod5 | Apoyo |
1 | hod3 | Servicio |
1 | hod3 | Finanzas |
1 | hod5 | HORA |
La cláusula HAVING en SQL
El uso de la cláusula HAVING con la cláusula Group By restringirá el resultado de la consulta a las filas que tengan el valor mencionado con la cláusula Have.
Comprender esto con un ejemplo lo hará más fácil:
Ejemplo # 4
SELECT * FROM EMPLOYEE GROUP BY gender HAVING gender = “Female”;
La ejecución de esta consulta obtiene el siguiente resultado:
nombre | años | teléfono | género | correo electrónico |
Mayo | 22 | 456 | Hembra | |
Ana | 45 | 644 | Hembra | |
Ollas | 57 | 3456 | Hembra | |
Res | 45 | 456 | Hembra | |
Pálido | 55 | 7789 | Hembra |
Ejemplo # 5
SELECT * FROM Employee_Department GROUP BY department HAVING department = “Finance”;
La ejecución de esta consulta obtiene el siguiente resultado:
nombre | capacho | Departamento |
Mayo | hod2 | Finanzas |
Ollas | hod2 | Finanzas |
Tung | hod3 | Finanzas |
Conclusión
Usando la cláusula GROUP BY con la instrucción SELECT podemos agrupar filas con los mismos valores junto con el uso de funciones, constantes y expresiones agregadas.
Artículos recomendados
Esta es una guía de la cláusula GROUP BY en SQL. Aquí discutimos cómo funciona la cláusula GROUP BY en SQL con la ayuda de ejemplos y tablas de empleados. También puede echar un vistazo a los siguientes artículos para obtener más información:
- Consulta de inserción de SQL
- Vistas SQL
- Base de datos en SQL
- Transacciones en SQL