SQL HAVING: Para filtrar resultados

Utilice SQL HAVING para filtrar los resultados resumidos de un GROUP BY. Especifica la condición de búsqueda para el grupo o agregado.

SQL HAVING solo se utiliza con SELECT. Se usa principalmente cuando un GROUP BY está presente, si uno no lo está, hay un solo grupo agregado implícito.

Sintaxis de la clausula SQL Having

Cuando se construye una instrucción SELECT usando SQL Having el orden es:

SELECT olumna_Name1, columna_Name2
FROM tabla
WHERE condición
GROUP BY columna
HAVING condición 
ORDER by columna.

sql having

Entonces, ¿Qué queremos decir con que SQL HAVING filtra los resultados del resumen? Veamos un ejemplo:

Ejemplos de cláusula SQL HAVING en SQL

En este artículo, hemos tomado los siguientes ejemplos que lo ayudarán a usar la cláusula SQL HAVING con diferentes funciones agregadas de SQL:

Ejemplo 1: Tomemos la siguiente tabla Estudiante_detalle, que le ayuda a analizar la cláusula HAVING con la función agregada COUNT:

ID_NoNombreMarcasEdad
1María9120
2José6019
3Mario8217
4Ana9218
5Pedro5020
6Franklin8818
7Antoni5719
8Manuel6420

Suponga que desea contar el número de estudiantes de la tabla anterior según su edad. Para ello, tienes que escribir la siguiente consulta:

SELECT COUNT (ID_No), Edad
FROM Estudiante_detalle
GROUP BY  Edad;

La consulta anterior mostrará el siguiente resultado:

Contar (ID_No)Edad
320
219
117
218

Ahora, suponga que desea mostrar la edad de aquellos estudiantes cuyo número de registro es mayor y es igual a 2. Para este caso, debe escribir la siguiente consulta con la cláusula SQL HAVING en SQL server:

SELECT COUNT(ID_No), Edad  FROM  Estudiante_detalle 
GROUP BY  Edad 
HAVING COUNT(ID_No) >= 2 ;     

El resultado de la consulta SQL anterior muestra la siguiente tabla en el resultado:

Contar (ID_No)Edad
320
219
218

Función MIN con cláusula SQL  HAVING:

Ejemplo 2: Tomemos la siguiente tabla de empleados , que lo ayuda a analizar la cláusula SQL  HAVING con la función agregada MIN y MAX:

Emp_IDNombreSalarioEmp_Dept
1001María9000Finanzas
1002José4000HORA
1003Mario3000Codificación
1004Ana6000Codificación
1005Pedro5000HORA
1006Franklin10000Márketing
1007Antoni4000Codificación
1008Manuel8000Finanzas

Si desea mostrar cada departamento y el salario mínimo en cada departamento, debe escribir la siguiente consulta:

SELECT MIN (Emp_Salario), Emp_Dept  
FROM  Empleados  
GROUP BY  Emp_Dept;

El resultado de la consulta anterior muestra el siguiente resultado:

MIN(Emp_Salario)Emp_Dept
8000Finanzas
4000HORA
3000Codificación
10000Márketing

Ahora, suponga que desea mostrar solo aquellos departamentos cuyo salario mínimo de empleados es mayor a 4000. Para este caso, debe escribir la siguiente consulta con la cláusula SQL HAVING:

SELECCT MIN (Emp_Salario), Emp_Dept  
FROM  Empleados 
GROUP BY  Emp_Dept  
HAVING MIN (Emp_Salario) > 4000 ;

La consulta SQL anterior muestra la siguiente tabla en el resultado:

MIN(Emp_Salario)Emp_Dept
8000Finanzas
10000Márketing

Función MAX con cláusula SQL HAVING:

En la tabla de empleados anterior, si desea enumerar cada departamento y el salario máximo en cada departamento. Para ello, tienes que escribir la siguiente consulta:

SELECT MAX (Emp_Salario), Emp_Dept  
FROM  Empleados 
GROUP BY  Emp_Dept;

La consulta anterior mostrará el siguiente resultado:

MAX(Emp_Salario)Emp_Dept
9000Finanzas
5000HORA
6000Codificación
10000Márketing

Ahora, suponga que desea mostrar solo aquellos departamentos cuyo salario máximo de empleados es inferior a 8000. Para este caso, debe escribir la siguiente consulta con la cláusula HAVING en SQL:

SELECT MAX (Emp_Salario), Emp_Dept 
FROM  Empleados 
GROUP BY  Emp_Dept  
HAVING MAX (Emp_Salario) < 8000 ;

El resultado de la consulta SQL anterior muestra la siguiente tabla en el resultado:

MAX(Emp_Salario)Emp_Dept
5000HORA
6000Codificación

Diferencia entre la cláusula HAVING y WHERE

La diferencia entre las cláusulas WHERE y HAVING en la base de datos es la pregunta más importante que se hace durante una entrevista de TI.
La siguiente tabla muestra las comparaciones entre estas dos cláusulas, pero la principal diferencia es que la cláusula WHERE usa la condición para filtrar registros antes de realizar cualquier agrupación, mientras que la cláusula HAVING usa la condición para filtrar valores de un grupo.

HAVINGWHERE
1. La cláusula HAVING se usa en los sistemas de bases de datos para obtener los datos/valores de los grupos de acuerdo con la condición dada.1. La cláusula WHERE se usa en los sistemas de bases de datos para obtener los datos/valores de las tablas de acuerdo con la condición dada.
2. La cláusula HAVING siempre se ejecuta con la cláusula GROUP BY.2. La cláusula WHERE se puede ejecutar sin la cláusula GROUP BY.
3. La cláusula HAVING puede incluir funciones agregadas de SQL en una consulta o declaración.3. No podemos usar la función agregada de SQL con la cláusula WHERE en las declaraciones.
4. Solo podemos usar la instrucción SELECT con la cláusula HAVING para filtrar los registros.4. Mientras que podemos usar fácilmente la cláusula WHERE con instrucciones UPDATE, DELETE y SELECT.
5. La cláusula HAVING se usa en consultas SQL después de la cláusula GROUP BY.5. La cláusula WHERE siempre se usa antes que la cláusula GROUP BY en consultas SQL.
6. Podemos implementar esta cláusula SQL en operaciones de columna.6. Podemos implementar esta cláusula SQL en operaciones de fila.
7. Es un post-filtro.7. Es un prefiltro.
8. Se utiliza para filtrar grupos.8. Se utiliza para filtrar el único registro de la tabla.

Deja un comentario