SQL Having子句

时间:2020-02-23 14:32:28  来源:igfitidea点击:

在本文中,我们将重点详细讨论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