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