Cláusula SQL HAVING con ejemplos

En MSSQL, la cláusula HAVING se usa para aplicar un filtro en el resultado de   GROUP BY según la condición especificada. Las condiciones son de tipo booleano, es decir, uso de operadores lógicos (Y, O). Esta cláusula se incluyó en SQL porque la palabra clave WHERE falló cuando la usamos con expresiones agregadas. Tener es una cláusula de uso muy general en SQL. Similar a DONDE ayuda aplicar condiciones, pero HAVING funciona con grupos. Si desea filtrar un grupo, la cláusula HAVING entra en acción.

Algunos puntos importantes:

  • La cláusula Have se utiliza para filtrar datos de acuerdo con las condiciones proporcionadas.
  • La cláusula «have» se usa generalmente en informes de grandes datos.  
  • La cláusula Have solo se usa con la cláusula SELECT.
  • La expresión en la sintaxis solo puede tener constantes.
  • En la consulta, ORDER BY debe colocarse después de la cláusula HAVING, si la hay.
  • La cláusula HAVING implementa la operación de columna.
  • La cláusula «have» se usa generalmente después de GROUP BY.
  • La cláusula GROUP BY se utiliza para organizar los datos necesarios en grupos.

Sintaxis:

SELECT col_1, function_name(col_2)
FROM tablename
WHERE condition
GROUP BY column1, column2
HAVING Condition
ORDER BY column1, column2;

Aquí, function_name es el nombre de la función utilizada, por ejemplo, SUM(), AVG().

Ejemplo 1: 

Aquí primero creamos un nombre de base de datos como «Empresa», luego crearemos una tabla llamada «Empleado» en la base de datos. Después de crear una tabla ejecutaremos la consulta.

Paso 1: Crear una base de datos

CREATE DATABASE Company;

Paso 2: Para utilizar esta base de datos

USE Company;

Paso 3: Crear tabla

CREATE TABLE Employee(
   EmployeeId int,
   Name Varchar(20),
   Gender Varchar(20),
   Salary int,
   Department Varchar(20),
   Experience Varchar(20)
);

Agregue valor a la tabla:

INSERT INTO Employee VALUES (1, 'Rachit', 'M', 50000, 'Engineering', '6 year')
INSERT INTO Employee VALUES (2, 'Shobit', 'M', 37000, 'HR', '3 year')
INSERT INTO Employee VALUES (3, 'Isha', 'F', 56000, 'Sales', '7 year')
INSERT INTO Employee VALUES (4, 'Devi', 'F', 43000, 'Management', '4 year')
INSERT INTO Employee VALUES (5, 'Akhil', 'M', 90000, 'Engineering', '15 year')

La tabla final es:

SELECT * FROM Employee;

Paso 4: Ejecutar la consulta

Esta tabla de empleados nos ayudará a entender la Cláusula HAVING. Contiene identificaciones de empleados, nombre, género, departamento y salario. Para saber la suma de salarios, escribiremos la consulta:

SELECT Department, sum(Salary) as Salary
FROM employee
GROUP BY department;  

Aquí está el resultado,

Ahora si necesitamos mostrar los departamentos donde la suma de los salarios es de 50.000 o más. En esta condición, utilizaremos la cláusula HAVING.

SELECT Department, sum(Salary) as Salary
FROM employee
GROUP BY department
HAVING SUM(Salary) >= 50000;  

Ejemplo 2:

Supongamos que un maestro quiere anunciar los toppers en clase. Para ello, decide premiar a todos los alumnos que hayan obtenido una puntuación superior al 95 %. Necesitamos agrupar la base de datos por nombre y su porcentaje y averiguar quién obtuvo más del 95% en ese año. Entonces, para esto primero, creamos un nombre de base de datos como «Escuela», y luego crearemos una tabla llamada «Estudiante» en la base de datos. Después de crear una tabla ejecutaremos la consulta.

Paso 1: Crear una base de datos

CREATE DATABASE School;

Paso 2: Para utilizar esta base de datos

USE School;

Paso 3: Crear tabla

CREATE TABLE Student(
   student Varchar(20),
   percentage int
);

Agregue valor a la tabla:

INSERT INTO Student VALUES ('Isha Patel', 98)
INSERT INTO Student VALUES ('Harsh Das', 94)
INSERT INTO Student VALUES ('Rachit Sha', 93)
INSERT INTO Student VALUES ('Sumedha', 98)
INSERT INTO Student VALUES ('Rahat Ali', 98)

La tabla final es:

SELECT * FROM Student;

Paso 4: Ejecutar consulta

SELECT student, percentage
FROM Student
GROUP BY student, percentage
HAVING percentage > 95;

Aquí, tres estudiantes llamados Isha, Sumedha, Rahat Ali obtuvieron más del 95 %.

    

Además, también podemos filtrar filas en múltiples valores usando la cláusula HAVING. La cláusula HAVING también permite filtrar filas usando más de una condición agregada.

SELECT student  
FROM Student
WHERE percentage > 90
GROUP BY student, percentage
HAVING SUM(percentage) < 1000 AND AVG(percentage) > 95;

Esta consulta devuelve los estudiantes que tienen un porcentaje superior a 95 y la suma del porcentaje es inferior a 1000. 

 

Publicación traducida automáticamente

Artículo escrito por xishaapatel y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *