如在
聚集表达式 和
用户定义的聚集 的图中指明的那样,当您使用聚集表达式时,不是所有表达式都可用。例如,聚集函数的参数自身不可包含聚集函数。在下列上下文中,您不可使用聚集函数:
- 在 WHERE 子句中,但有这两个例外:
- 除非在 WHERE 子句内的子查询的 Projection 子句中指定该聚集,
- 或除非该查询在来自父查询的相关列上,且 WHERE 子句在 HAVING 子句内的子查询中。
- 作为聚集函数的一个参数。
下列嵌套的聚集表达式不是有效的:
MAX (AVG (order_num))
- 在任何下列数据类型的列上:
- 大对象(BLOB、BYTE、CLOB、TEXT)
- 集合数据类型(LIST、MULTISET、SET)
- ROW 数据类型(命名的或未命名的)
- OPAQUE 数据类型(除了支持 opaque 类型的用户定义的聚集函数)。
您不可使用集合数据类型的列作为下列聚集函数的参数:
内建的聚集的表达式或 column 参数(除了 COUNT、MAX、MIN 和 RANGE 之外)必须返回数值或 INTERVAL 数据类型,但 RANGE 也接受 DATE 和 DATETIME 参数。
对于
SUM 和
AVG,您不可直接地使用两个 DATE 值之间的差异作为聚集的参数,但您可使用 DATE 差异作为算术表达式参数内的运算对象。例如:
SELECT . . . AVG(ship_date - order_date);
返回错误 -1201,但下列等同的表达式是有效的:
SELECT . . . AVG((ship_date - order_date)*1);
下列查询片段使用有效的语法来为两个列表达式声明别名:
SELECT . . .
SUM(orders.ship_charge) as o2,
COUNT(DISTINCT
CASE WHEN orders.backlog MATCHES 'n'
THEN orders.order_num END ) AS o3,
. . .
在此,
SUM 的参数是 MONEY(6) 列值,且
COUNT DISTINCT 聚集采用
CASE 表达式作为它的参数。