SQL 方言通

首页 / 聚合

ANY_VALUE 取组内任意值

ANY_VALUE 从每组中任取一个值,常用于 GROUP BY 时带出不参与分组、但组内都一样的列。结果不确定,各引擎对 NULL 的处理也不同。Hologres、Hive 和 Flink 没有这个函数。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute 支持 ANY_VALUE(colname) 值为 NULL 的行不参与计算,不保证返回哪一行。 官方文档
Hologres 需改写 MAX(col) 通用聚合函数中没有 ANY_VALUE。组内值都相同时,可以用 MAX 或 MIN 代替。 官方文档
StarRocks 支持 ANY_VALUE(expr) 返回值不确定。3.2 起支持 ARRAY、MAP 和 STRUCT 类型。 官方文档
Doris 支持 ANY_VALUE(expr) 别名 ANY。组内有非 NULL 值时返回其中一个,全部为 NULL 时返回 NULL。 官方文档
Hive 需改写 max(col) 函数手册中没有 ANY_VALUE,组内值都相同时用 max 或 min 代替。 官方文档
Spark SQL 支持 any_value(expr[, isIgnoreNull]) Spark 3.4.0 起提供,结果不确定。isIgnoreNull 为 true 时只返回非 NULL 值,默认可能返回 NULL。 官方文档
Flink SQL 需改写 FIRST_VALUE(expression) 内置函数中没有 ANY_VALUE,可以用聚合函数 FIRST_VALUE 代替。 官方文档

迁移注意事项

示例

按门店汇总时带出门店名称

MaxCompute
SELECT store_id, ANY_VALUE(store_name), SUM(amount) FROM sales GROUP BY store_id;
Hologres
SELECT store_id, MAX(store_name), SUM(amount) FROM sales GROUP BY store_id;
Spark SQL
SELECT store_id, any_value(store_name, true), sum(amount) FROM sales GROUP BY store_id;

同类函数

最后核对日期: