En este artículo, aprenderemos sobre el concepto de la cláusula HAVING y cómo usarlo en SQL.
¿Qué es la cláusula HAVING?
En el lenguaje de consulta estructurado, la cláusula HAVING utilizada con la cláusula GROUP BY especifica las condiciones que filtran los resultados que aparecen en la salida. Devuelve solo aquellos datos del grupo que cumple las condiciones.
Con la cláusula HAVING, podemos usar la cláusula WHERE también en la consulta. Si usamos ambas cláusulas juntas, la cláusula WHERE se ejecutará primero donde filtrará las filas individuales, luego las filas se agrupan y al final, la cláusula HAVING filtra los grupos.
Las condiciones de la cláusula HAVING se colocan después de la cláusula GROUP BY. La cláusula HAVING se comportó igual que la cláusula WHERE en el lenguaje de consulta estructurado que no usa la cláusula GROUP BY. Podemos usar funciones agregadas como MIN, MAX, SUM, AVG y COUNT. Esta función solo se usa con la cláusula SELECT y la cláusula HAVING.
Sintaxis de la cláusula HAVING:
SELECT COLUMNS, AGGREGATE FUNCTION, FROM TABLENAME WHERE CONDITION GROUP BY COLUMN HAVING CONDITIONS;
Hay algunos pasos que tenemos que aprender sobre cómo usar la cláusula HAVING en la consulta SQL:
Paso 1:Cree una nueva base de datos o use una base de datos ya creada.
Ya he creado una base de datos. Usaré el nombre de mi base de datos creada existente.
USE SCHOOL;
Escuela es el nombre de la base de datos.
Aquellos que no hayan creado una base de datos, sigan la siguiente consulta para crear la base de datos:
CREATE DATABASE database_name;
Después de crear la base de datos, seleccione la base de datos usando la palabra clave USE seguida del nombre de la base de datos.
Paso 2:Cree una nueva tabla o utilice una tabla existente:
Ya he creado una tabla. Usaré la tabla existente llamada Student.
Para crear las nuevas tablas, siga la siguiente sintaxis CREATE TABLE:
CREATE TABLE table_name(
columnname1 datatype(column size),
columnname2 datatype(column size),
columnname3 datatype(column size)
);
Paso 3:inserte los registros en la tabla recién creada usando la consulta INSERT y visualice los registros usando la consulta SELECT.
Use la siguiente sintaxis para insertar nuevos registros en la tabla:
INSERT INTO table_name VALUES(value1, value2, value3);
Para ver los registros de la tabla usando la siguiente sintaxis:
SELECT * FROM table_name;
La siguiente consulta mostrará los registros de Empleados
SELECT * FROM Student;
El resultado de la consulta SELECT anterior es:
STUDENT_ID | NOMBRE_ESTUDIANTE | PHYSICS_MARKS | MARCAS_QUÍMICAS | MATHS_MARKS | TOTAL_MARCAS |
1 | NEHA | 85 | 88 | 100 | 273 |
2 | VISHAL | 70 | 90 | 82 | 242 |
3 | SAMKEET | 75 | 88 | 96 | 259 |
4 | NIKHIL | 60 | 75 | 80 | 215 |
5 | YOGESH | 56 | 65 | 78 | 199 |
6 | ANKITA | 95 | 85 | 96 | 276 |
7 | SONAM | 98 | 89 | 100 | 287 |
8 | VINEET | 85 | 90 | 100 | 275 |
9 | SANKET | 86 | 78 | 65 | 229 |
10 | PRACHI | 90 | 80 | 75 | 245 |
Paso 4:estamos listos para usar la cláusula HAVING en el lenguaje de consulta estructurado.
Ahora profundizaremos en la cláusula HAVING con la ayuda de ejemplos.
Tenemos una tabla llamada Estudiante que contiene los siguientes registros.
STUDENT_ID | NOMBRE_ESTUDIANTE | PHYSICS_MARKS | MARCAS_QUÍMICAS | MATHS_MARKS | TOTAL_MARCAS |
1 | NEHA | 85 | 88 | 100 | 273 |
2 | VISHAL | 70 | 90 | 82 | 242 |
3 | SAMKEET | 75 | 88 | 96 | 259 |
4 | NIKHIL | 60 | 75 | 80 | 215 |
5 | YOGESH | 56 | 65 | 78 | 199 |
6 | ANKITA | 95 | 85 | 96 | 276 |
7 | SONAM | 98 | 89 | 100 | 287 |
8 | VINEET | 85 | 90 | 100 | 275 |
9 | SANKET | 86 | 78 | 65 | 229 |
10 | PRACHI | 90 | 80 | 75 | 245 |
Ejemplo 1: Escriba una consulta para mostrar la suma de notas de física donde la suma de notas de física es mayor que 60 grupos por ID de estudiante.
SELECT STUDENT_ID, STUDENT_NAME, SUM(PHYSICS_MARKS) AS PHYSICS_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING SUM(PHYSICS_MARKS) > 60;
En la consulta anterior, hemos tomado una función agregada llamada SUM() seguida del nombre de columna physics_marks, que sumará la columna. Primero se ejecuta Sum(physics_marks), luego se ejecuta la condición de la cláusula HAVING al final, y se mostrará el resultado final. Hemos utilizado la cláusula GROUP BY seguida del nombre de columna Student_Id para agrupar los mismos valores y considerarlos un grupo. Si los valores no son los mismos, no se formará ningún grupo para los valores. Y al final, hemos usado la cláusula HAVING donde ponemos la condición que ayudará a mostrar solo los detalles de los estudiantes donde la suma de las calificaciones de física es mayor a 60. Si las calificaciones de física de los estudiantes son menores a 60, no mostrará el registros.
El resultado de la consulta anterior es:
STUDENT_ID | NOMBRE_ESTUDIANTE | PHYSICS_MARKS |
1 | NEHA | 85 |
2 | VISHAL | 70 |
3 | SAMKEET | 75 |
6 | ANKITA | 95 |
7 | SONAM | 98 |
8 | VINEET | 85 |
9 | SANKET | 86 |
10 | PRACHI | 90 |

Como podemos ver en el resultado, solo se muestran las identificaciones, los nombres y las calificaciones de física de los estudiantes donde la suma de las calificaciones de física es superior a 60. Como usamos la cláusula GROUP BY y ningún valor es similar, se cuentan como un solo grupo. .
Ejemplo 2: Escriba una consulta para mostrar las calificaciones máximas de calificaciones de química donde una calificación máxima de calificaciones de química es inferior a 90 grupos por ID de estudiante.
SELECT STUDENT_ID, STUDENT_NAME, MAX(CHEMISTRY_MARKS) AS CHEMISTRY_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING MAX(CHEMISTRY_MARKS) < 90;
En la consulta anterior, hemos tomado una función agregada llamada MAX() seguida por el nombre de columna chemistry_marks, que encontrará las marcas máximas de la columna. Hemos utilizado la cláusula GROUP BY seguida del nombre de columna Student_Id para agrupar los mismos valores y considerarlos un grupo. Si los valores no son los mismos, se formará un grupo separado para los valores. Y al final, hemos usado la cláusula HAVING donde ponemos la condición que ayudará a mostrar solo los detalles de los estudiantes donde la calificación máxima de química es inferior a 90. Si las calificaciones de química de los estudiantes son superiores a 90, no lo hará. mostrar los registros. Primero, se ejecuta MAX(chem_marks), luego se ejecuta la condición de la cláusula HAVING al final y se mostrará el resultado final. El resultado de la consulta anterior es:
STUDENT_ID | NOMBRE_ESTUDIANTE | MARCAS_QUÍMICAS |
1 | NEHA | 88 |
3 | SAMKEET | 88 |
4 | NIKHIL | 75 |
5 | YOGESH | 65 |
6 | ANKITA | 85 |
7 | SONAM | 89 |
9 | SANKET | 78 |
10 | PRACHI | 80 |

Como podemos ver en el resultado, solo se muestran las identificaciones, los nombres y las calificaciones de química de los estudiantes donde la calificación máxima de calificaciones de química es inferior a 90. Como usamos la cláusula GROUP BY y ningún valor es similar, se cuentan como una sola grupo.
Ejemplo 3: Escriba una consulta para mostrar las calificaciones de matemáticas donde una calificación mínima de calificaciones de matemáticas sea superior a 70 grupos por ID de estudiante.
SELECT STUDENT_ID, STUDENT_NAME, MIN(MATHS_MARKS) AS MATHS_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING MIN(MATHS_MARKS) >70;
En la consulta anterior, hemos tomado una función agregada llamada MIN() seguida del nombre de columna maths_marks, que encontrará las marcas mínimas de la columna. Hemos utilizado la cláusula GROUP BY seguida del nombre de columna Student_Id para agrupar los mismos valores y considerarlos un grupo. Si los valores no son los mismos, se formará un grupo separado para los valores. Y al final, hemos usado la cláusula HAVING donde ponemos la condición que ayudará a mostrar solo los detalles del estudiante donde la calificación mínima de matemáticas es mayor a 70. Si las calificaciones de matemáticas del estudiante son menores a 70, no lo hará. mostrar los registros. Primero, se ejecuta MIN(maths_marks), luego se ejecuta la condición de la cláusula HAVING al final y se mostrará el resultado final.
El resultado de la consulta anterior es:
STUDENT_ID | NOMBRE_ESTUDIANTE | MATHS_MARKS |
1 | NEHA | 100 |
2 | VISHAL | 82 |
3 | SAMKEET | 96 |
4 | NIKHIL | 80 |
5 | YOGESH | 78 |
6 | ANKITA | 96 |
7 | SONAM | 100 |
8 | VINEET | 100 |
10 | PRACHI | 75 |

Como podemos ver en el resultado, solo se muestran las identificaciones, los nombres y las calificaciones matemáticas de los estudiantes donde la calificación mínima de las calificaciones matemáticas es superior a 70. Como usamos la cláusula GROUP BY y ningún valor es similar, se cuentan como una sola grupo.
Ejemplo 4: Escriba una consulta para mostrar los detalles de los estudiantes donde las calificaciones mínimas de física son superiores a 56, Y las calificaciones máximas de matemáticas son inferiores a 98.
SELECT STUDENT_ID, STUDENT_NAME, MIN(PHYSICS_MARKS) AS PHYSICS_MARKS , MAX(MATHS_MARKS) AS MATHS_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING MIN(PHYSICS_MARKS) >58 AND MAX(MATHS_MARKS)<98;
Usamos funciones de agregado doble en una sola consulta min() y max() en la consulta anterior. Min() se usa para encontrar las notas mínimas de física y Max() se usa para encontrar las notas máximas de matemáticas. Primero, la consulta encontrará las marcas min() y max() de física y matemáticas de la tabla de estudiantes. Como usamos la cláusula GROUP BY, los valores similares se asignan como un grupo, de lo contrario, los valores estarán separados. Como ningún valor es similar en la tabla, todos los valores se han separado. Ningún valor se asignará como un grupo. A continuación, usamos la cláusula HAVING, que funciona como cláusula WHERE a diferencia de la cláusula HAVING asignada al grupo. En primer lugar, la condición es MIN(PHYSICS_MARKS)> 58. Como ningún valor es similar, cada valor se considerará como valor mínimo y, en comparación con la condición, se utiliza el mismo enfoque para MAX(MATHS_MARKS). Como usamos el operador AND en la consulta, esas condiciones cumplen ambas condiciones. Solo los registros de esos estudiantes se muestran en el resultado final.
El resultado de la consulta anterior es:
STUDENT_ID | NOMBRE_ESTUDIANTE | PHYSICS_MARKS | MATHS_MARKS |
2 | VISHAL | 70 | 82 |
3 | SAMKEET | 75 | 96 |
4 | NIKHIL | 60 | 80 |
6 | ANKITA | 95 | 96 |
9 | SANKET | 86 | 65 |
10 | PRACHI | 90 | 75 |

Como podemos ver en el resultado, solo se muestran los registros de los estudiantes donde las calificaciones mínimas de los valores de física son mayores a 56, Y las calificaciones máximas de matemáticas son menores a 98.
En el ejemplo anterior, si se usa el operador OR en lugar del operador AND, se muestran los diez registros porque el operador OR dice que si una condición falla y otras condiciones son verdaderas, entonces los registros de la tabla cumplen las condiciones.