聚集表达式中有效的表达式的子集

如在 聚集表达式用户定义的聚集 的图中指明的那样,当您使用聚集表达式时,不是所有表达式都可用。例如,聚集函数的参数自身不可包含聚集函数。在下列上下文中,您不可使用聚集函数:
  • 在 WHERE 子句中,但有这两个例外:
    • 除非在 WHERE 子句内的子查询的 Projection 子句中指定该聚集,
    • 或除非该查询在来自父查询的相关列上,且 WHERE 子句在 HAVING 子句内的子查询中。
  • 作为聚集函数的一个参数。

    下列嵌套的聚集表达式不是有效的:

    MAX (AVG (order_num)) 
  • 在任何下列数据类型的列上:
    • 大对象(BLOB、BYTE、CLOB、TEXT)
    • 集合数据类型(LIST、MULTISET、SET)
    • ROW 数据类型(命名的或未命名的)
    • OPAQUE 数据类型(除了支持 opaque 类型的用户定义的聚集函数)。
您不可使用集合数据类型的列作为下列聚集函数的参数:
  • AVG
  • SUM
  • MIN
  • MAX

内建的聚集的表达式或 column 参数(除了 COUNTMAXMINRANGE 之外)必须返回数值或 INTERVAL 数据类型,但 RANGE 也接受 DATE 和 DATETIME 参数。

对于 SUMAVG,您不可直接地使用两个 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 表达式作为它的参数。