包括或排除结果集中的重复值

您可使用 ALL、DISTINCT 或 UNIQUE 关键字来限定聚集函数的作用域。

如果您包括聚集作用域限定符,则它必须为参数列表中的第一项。

ALL 关键字指定在计算中使用从列或表达式选择的所有值,包括任何重复的值。由于 ALL 是聚集函数的缺省的作用域,因此下列两个聚集表达式是等同的,且它们的返回值基于 ship_weight 列中所有符合条件的行的值:
AVG(ship_weight)
        AVG(ALL ship_weight)
包括 DISTINCT 关键字作为聚集函数的第一个参数将它的后续的参数限定到来自指定的列的唯一值。在此上下文中,UNIQUE 与 DISTINCT 关键字是同义词。下列两个聚集表达式是等同的,且他们的返回值基于 ship_weight 列的符合条件的行中唯一值的集合:
AVG(DISTINCT ship_weight)
        AVG(UNIQUE ship_weight)
如果几个符合条件的行有相同的 ship_weight 值,则在计算该聚集的值中仅包括那个值的一个实例。
如果查询包括 Projection 子句中的 DISTINCT 或 UNIQUE 关键字(而不是 ALL 关键字或没有关键字),其 Select 列表还包括其参数列表以 DISTINCT 或 UNIQUE 关键字开头的聚集函数,则数据库服务器发出错误,如在下列示例中所示:
SELECT DISTINCT AVG(DISTINCT ship_weight)
        FROM orders;
也就是说,在 Projection 子句和聚集函数的同一查询中,要将结果集限制到唯一的值是无效的。

然而,如果 Projection 子句为指定 SELECT 语句的 DISTINCT 或 UNIQUE 关键字,则该查询可包括一个或多个聚集函数,每一函数包括 DISTINCT 或 UNIQUE 关键字作为参数列表中的第一个规范,如在下列示例中所示:

SELECT AVG(UNIQUE ship_weight), COUNT (DISTINCT customer_num)
      FROM orders;