类别:

/sql-reference/functions-aggregation`(通用)、:doc:/sql-reference/functions-analytic`(通用)

ANY_VALUE

返回组中表达式的某些值。结果是不确定的。

语法

聚合函数

ANY_VALUE( [ DISTINCT ] <expr1> )
Copy

窗口函数

ANY_VALUE( [ DISTINCT ] <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
Copy

使用说明

  • 可以为此函数指定 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;
Copy

在此查询中,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;
Copy

这简化了 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;
Copy
语言: 中文