如何在 SQL 中使用 HAVING

2024 年 8 月 29 日 | 阅读 6 分钟

在本 SQL 页面中,您将学习 HAVING 关键字是什么以及如何在结构化查询语言中实现它。

什么是 HAVING?

HAVING 是 SQL 中的一个关键字,用于根据特定的单个或多个条件选择由 GROUP BY 关键字过滤的行。

在 SQL 中使用它的原因是 SQL 软件不允许您将 WHERE 子句与聚合函数一起使用。在 SQL 中,我们只能在 SELECT 查询中使用 HAVING 子句。

HAVING 子句的语法

在上述语法中,GROUP BY 子句创建相同行的组,HAVING 子句将条件应用于结果组。HAVING 子句对表中的列或字段执行操作。如果我们在 HAVING 语法中不能使用 GROUP BY 子句,那么 HAVING 子句的作用与 SQL WHERE 子句类似。

如果您想学习如何在 SQL 表中使用 HAVING 子句,那么您需要遵循以下步骤:

  1. 创建简单的数据库和表。
  2. 向表中插入数据
  3. 在没有 HAVING 子句的情况下查看插入的数据。
  4. 使用 HAVING 子句。

步骤 1:创建简单的数据库和表

首先,您需要在 SQL 中创建一个新数据库。

以下查询创建 Fortis_Hospital 数据库

现在,您需要使用以下 CREATE TABLE 语法创建一个新表

以下查询在 Fortis_Hospital 数据库中创建 Doctor_Info 表

步骤 2:将数据插入表中

现在,您需要使用以下语法向表中插入数据:

以下查询插入在 Fortis_Hospital 工作的医生的记录

步骤 3:在不使用 HAVING 子句的情况下查看表数据

以下查询以无序方式显示医生记录

上面 SELECT 查询的输出如下所示

Doctor_IDDoctor_NameDoctor_SpecialistDoctor_SalaryDoctor_GenderDoctor_Country
1035JonesMalaria_Specialist25000男性 (Male)英国
1015MarryDiabities_Specialist30000女性 (Female)United State
1003HarryFever_Specialist29000男性 (Male)英国
1044艾拉Cancer_Specialist35000女性 (Female)United State
1025MoriaCorona_Specialist34000其他欧洲

步骤 4:使用 HAVING 子句

以下 SQL SELECT 查询使用 HAVING 子句显示表记录

输出

Doctor_GenderSUM(Doctor_Salary)
男性 (Male)54000
其他34000

HAVING 子句与 SQL ORDER BY 子句

我们也可以在 SQL 的 SELECT 语句中将 ORDER BY 关键字与 HAVING 子句一起使用。

HAVING 子句与 ORDER BY 子句的语法

HAVING 子句与 ORDER BY 子句的示例

以下查询在 School 数据库中创建了新的 Subject 表

以下 INSERT INTO 查询向 Subject 表插入记录

以下查询显示 Subject 表的记录


Subject_ID科目名称 (Subject_Name)Subject_Teacher学生编号 (Student_ID)
2248电脑巴努 (Bhanu)101
2221生物学Punit103
2201化学Suresh101
2224数学Rohit103
2248电脑巴努 (Bhanu)105
2208印地语Sonu104
2221生物学Punit104
2224物理阿曼108
2248电脑巴努 (Bhanu)106
2208数学Sonu109

下面的 SQL 查询使用 SQL ORDER BY 子句和 HAVING 子句

输出

Subject_IDCOUNT(Student_ID) >=2
22082
22212
22483

HAVING 子句与 MIN 函数

我们也可以在结构化查询语言中使用 MIN 聚合函数与 HAVING 子句。

具有 MIN 函数的 GROUP BY 子句的语法

HAVING 子句与 MIN 聚合函数的示例

本示例使用下面的 College_Stu_Details 表来理解 HAVING 子句与 MIN 聚合函数的概念

以下 INSERT INTO 语句插入 College 学生的记录

以下查询仅在屏幕上以表格形式显示学生的记录


Stu_ID学生姓名 (Stu_Name)Stu_Subject学生年龄 (Stu_Age)学生分数 (Stu_Marks)
1001Anuj英文2070
1002拉曼 (Raman)数学2468
1004Shyam印地语1992
1007Vikash电脑2078
1011Monu英文2165
1014Jones印地语1893
1021Parul数学2097
1023Divya英文2189
1028Hemant电脑2390
1030Nidhi印地语2088
1032Priya英文2299
1038Mohit数学2192

以下查询显示上述 College_Stu_Details 表中每个科目的学生最低分数

输出

Subject_IDMIN (Stu_Marks)
英文65
数学92
印地语88
电脑78

HAVING 子句与 MAX 函数

我们也可以在结构化查询语言中使用 MAX 聚合函数与 HAVING 子句。

具有 MAX 聚合函数的 GROUP BY 子句的语法

HAVING 子句与 MAX 聚合函数的示例

本示例使用下面的 College_Stu_Details 表来理解 HAVING 子句与 SQL MAX 聚合函数的概念

以下 INSERT INTO 语句插入 College 学生的记录

以下查询仅在屏幕上以表格形式显示学生的记录


Stu_ID学生姓名 (Stu_Name)Stu_Subject学生年龄 (Stu_Age)学生分数 (Stu_Marks)
101Anuj英文2070
102拉曼 (Raman)数学2498
104Shyam印地语1992
107Vikash电脑2078
111Monu英文2165
114Jones印地语1893
121Parul数学2097
123Divya英文2189
128Hemant电脑2390
130Nidhi印地语2088
132Priya英文2299
138Mohit数学2192

以下查询显示上述 College_Stu_Details 表中每个科目的学生最高分数