Collection Contents 上一页 下一页 PDF

ASA SQL 用户指南

对查询结果进行汇总、分组和排序

HAVING 子句:选择数据组


HAVING 子句用于限制查询返回的行。它也为 GROUP BY 子句设置条件,方法与 WHERE 为 SELECT 子句设置条件的方法相类似。

HAVING 子句搜索条件基本上等同于 WHERE 搜索条件,只是 WHERE 搜索条件不能包括集合函数,而 HAVING 搜索条件经常包括集合函数。下面的示例是合法的:

HAVING AVG(unit_price) > 20

但下面的示例不合法:

WHERE AVG(unit_price) > 20
将 HAVING 与集合函数一起使用 

以下语句是将 HAVING 子句与集合函数一起使用的简单示例。

要列出那些有多种尺寸或颜色的产品,您需要一个查询来按名称给 product 表中的行分组,但要去除只包含一种独特产品的组:

SELECT name
FROM product
GROUP BY name
HAVING COUNT(*) > 1
name
Tee Shirt
Baseball Cap
Visor
Sweatshirt

有关何时可在 HAVING 子句中使用集合函数的信息,请参见在哪些地方可以使用集合函数

不与集合函数一起使用 HAVING 

HAVING 子句也可以不与集合函数一起使用。

以下查询对产品进行分组,然后将结果集限制为只包含名称以 B 开头的那些组。

SELECT name
FROM product
GROUP BY name
HAVING name LIKE 'B%'
name
Baseball Cap
在 HAVING 中有多个条件 

在 HAVING 子句中可以包括多个条件。可以用 AND、OR 或 NOT 运算符将这些条件组合起来,如下面的示例所示。

要列出那些有多种尺寸或颜色而且一个版本的价格超过 10 美元的产品,您需要一个查询来按名称将 product 表中的行分组,但要去除只包含一种独特产品的组,而且要去除那些最高单价低于 10 美元的组。

SELECT name
FROM product
GROUP BY name
HAVING COUNT(*) > 1
AND MAX(unit_price) > 10
name
Tee Shirt
Sweatshirt

Collection Contents 上一页 下一页 PDF