- 类别:
/sql-reference/functions-aggregation`(通用)、:doc:/sql-reference/functions-analytic`(通用)
ANY_VALUE¶
返回组中表达式的某些值。结果是不确定的。
语法¶
聚合函数
ANY_VALUE( [ DISTINCT ] <expr1> )
窗口函数
ANY_VALUE( [ DISTINCT ] <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
使用说明¶
可以为此函数指定 DISTINCT 关键字,但它没有任何效果。
用作窗口函数时:
此函数不支持:
OVER() 子句中的 ORDER BY 分子句。
窗口框架。
将 ANY_VALUE 与 GROUP BY 语句结合使用¶
ANY_VALUE 可以简化和优化 GROUP BY 语句的性能。许多查询的一个常见问题是,带有 GROUP BY 子句的查询结果只能包含 GROUP BY 子句本身使用的表达式或聚合函数的结果。例如:
SELECT customer.id , customer.name , SUM(orders.value)
FROM customer
JOIN orders ON customer.id = orders.customer_id
GROUP BY customer.id , customer.name;
在此查询中,customer.name
属性需要处于 GROUP BY 中才能包含在结果中。这是不必要的(例如,当 customer.id
已知是唯一时),并且使计算可能更复杂和更慢。另一种选择是使用聚合函数。例如:
SELECT customer.id , MIN(customer.name) , SUM(orders.value)
FROM customer
JOIN orders ON customer.id = orders.customer_id
GROUP BY customer.id;
这简化了 GROUP BY 子句,但仍需要计算 MIN 函数,这会产生额外的成本。
使用 ANY_VALUE,可以执行以下查询:
SELECT customer.id , ANY_VALUE(customer.name) , SUM(orders.value)
FROM customer
JOIN orders ON customer.id = orders.customer_id
GROUP BY customer.id;