SQL Having子句
在本文中,我们将重点详细讨论SQL Having子句。
为什么要有Having子句
Haven子句为任何SQL代码块/查询提供的数据类型和数量增加了限制。
通常,Having子句指导SELECT语句仅表示那些满足它所声明的特定条件的数据值。
现在,您可能会想到一个问题,当我们可以选择使用SQL WHERE子句时,为什么要引入Haveing子句呢?
好吧,让我回答您的这个查询!
SQL WHERE子句通过将条件应用于数据列来限制数据值。
但是,SQL WHERE子句不适用于SQL Aggregate函数。
这是Haveing子句出现的时候。
Have子句与聚合函数一起将条件应用于SELECT语句。
SQL Having的语法
了解了Haveing子句的必要性之后,让我们开始使用该子句的工作和实施。
SELECT columns from Table GROUP BY column HAVING condition;
SQL Have子句需要放在GROUP BY子句之后。
Haven子句仅将规定的条件应用于通过GROUP BY子句提及的列数据组成的组。
此外,如果我们在Haveing子句之前没有提到GROUP BY子句,那么Haveing子句的工作方式类似于普通的SQL WHERE子句。
SQL Having子句的示例
现在,让我们了解Haveing子句针对使用不同条件的各种示例的工作。
带有COUNT()函数的Haveing子句
在下面的示例中,我们使用count()函数作为Haveing子句的条件。
因此,据此,只会选择" id"和" city"列中的那些数据值,这些数据值将按" city"列进行分组并满足Haveing子句的条件。
例:
select COUNT(id),city from Info GROUP BY city HAVING COUNT(id) = 1;
输出:
1 Mumbai 1 Satara 1 USA
带有SUM()函数的Having子句
例:
select SUM(Cost),city from Info GROUP BY city HAVING SUM(Cost)>50;
输出:
97 Mumbai 165 Pune
SQL 带有MAX()函数的Having子句
如果您想了解更多有关max()函数的信息,请参见此处。
例:
select MAX(Cost),city from Info GROUP BY city HAVING MAX(Cost)>50;
输出:
97 Mumbai 100 Pune
SQL 包含AVG()函数的Having子句
让我们尝试使用avg函数的having子句
例:
select AVG(Cost),city from Info GROUP BY city HAVING AVG(Cost)>50;
输出:
97.0000 Mumbai 82.5000 Pune
使用多个条件的Having子句
Haven子句可与多个条件一起使用,并使用SQL AND,OR运算符等。
范例1:
在此示例中,我们使用SQL AND运算符将Haveing子句中的两个条件组合在一起。
select AVG(Cost),city from Info GROUP BY city HAVING AVG(Cost)>50 AND AVG(Cost)<95;
输出:
82.5000 Pune
范例2:
其中我们使用了SQL OR运算符在Haveing子句下结合了两个条件。
select AVG(Cost),city from Info GROUP BY city HAVING AVG(Cost)>20 OR AVG(Cost)<95;
输出:
97.0000 Mumbai 82.5000 Pune 50.0000 Satara 12.0000 USA
SQL 包含ORDER BY子句的Having子句
可以使用以下命令将Haveing子句与SQL ORDER BY子句关联:
select columns from Table GROUP BY column HAVING condition ORDER BY column;
例:
select AVG(Cost),city from Info GROUP BY city HAVING AVG(Cost)>20 OR AVG(Cost)<95 ORDER BY AVG(Cost);
输出:
12.0000 USA 50.0000 Satara 82.5000 Pune 97.0000 Mumbai