HAVING 子句用于限制查询返回的行。它也为 GROUP BY 子句设置条件,方法与 WHERE 为 SELECT 子句设置条件的方法相类似。
HAVING 子句搜索条件基本上等同于 WHERE 搜索条件,只是 WHERE 搜索条件不能包括集合函数,而 HAVING 搜索条件经常包括集合函数。下面的示例是合法的:
HAVING AVG(unit_price) > 20
但下面的示例不合法:
WHERE AVG(unit_price) > 20
以下语句是将 HAVING 子句与集合函数一起使用的简单示例。
要列出那些有多种尺寸或颜色的产品,您需要一个查询来按名称给 product 表中的行分组,但要去除只包含一种独特产品的组:
SELECT name FROM product GROUP BY name HAVING COUNT(*) > 1
| name |
|---|
| Tee Shirt |
| Baseball Cap |
| Visor |
| Sweatshirt |
有关何时可在 HAVING 子句中使用集合函数的信息,请参见在哪些地方可以使用集合函数。
HAVING 子句也可以不与集合函数一起使用。
以下查询对产品进行分组,然后将结果集限制为只包含名称以 B 开头的那些组。
SELECT name FROM product GROUP BY name HAVING name LIKE 'B%'
| name |
|---|
| Baseball Cap |
在 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 |
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。