Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询和修改数据 » 对查询结果进行汇总、分组和排序

 

HAVING 子句:选择数据组

HAVING 子句会对查询所返回的行加以限制。它为 GROUP BY 子句设置条件的方式与 WHERE 为 SELECT 子句设置条件的方式类似。

HAVING 子句搜索条件基本上等同于 WHERE 搜索条件,只是 WHERE 搜索条件不能包括集合。例如,允许以下用法:

HAVING AVG( UnitPrice ) > 20

不允许以下用法:

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

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

要列出那些有多种尺寸或颜色的产品,您需要使用查询来按名称对 Products 表中的行分组,但要将只包含一种不同产品的组排除在外:

SELECT Name
   FROM Products
   GROUP BY Name
   HAVING COUNT( * ) > 1;
Name
Tee Shirt
Baseball Cap
Visor
Sweatshirt

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

不与集合函数一起使用 HAVING

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

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

SELECT Name
   FROM Products
   GROUP BY Name
   HAVING Name LIKE 'B%';
Name
Baseball Cap
在 HAVING 中有多个条件

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

要列出那些有多种尺寸或颜色,并且一个款式的价格超过 10 美元的产品,您需要使用查询来按名称将 Products 表中的行分组,但要将只包含一种不同产品的组以及最高单价低于 10 美元的组排除在外。

SELECT Name
   FROM Products
   GROUP BY Name
   HAVING COUNT( * ) > 1
   AND MAX( UnitPrice ) > 10;
Name
Tee Shirt
Sweatshirt