ANY_VALUE
引入或更新于:v1.2.815
聚合函数。
ANY_VALUE() 函数从输入表达式中返回一个任意的非 NULL 值。当需要在 GROUP BY 查询中选择一个既未分组也未聚合的列时,可以使用此函数。
别名:
ANY()返回与ANY_VALUE()相同的结果,为保持兼容性而保留。
语法
ANY_VALUE(<expr>)
参数
| 参数 | 说明 | 
|---|---|
| <expr> | 任意表达式 | 
返回类型
<expr> 的类型。如果所有值都为 NULL,则返回值为 NULL。
备注
- ANY_VALUE()是非确定性的,每次执行可能会返回不同的值。
- 为了获得可预测的结果,请改用 MIN()或MAX()。
示例
示例数据:
CREATE TABLE sales (
  region VARCHAR,
  manager VARCHAR,
  sales_amount DECIMAL(10, 2)
);
INSERT INTO sales VALUES
  ('North', 'Alice', 15000.00),
  ('North', 'Alice', 12000.00),
  ('South', 'Bob', 20000.00);
问题: 此查询会失败,因为 manager 不在 GROUP BY 子句中:
SELECT region, manager, SUM(sales_amount)  -- ❌ 错误
FROM sales GROUP BY region;
旧方法: 将 manager 添加到 GROUP BY 中,但这会创建比所需更多的分组,从而影响性能:
SELECT region, manager, SUM(sales_amount)
FROM sales GROUP BY region, manager;  -- ❌ 因额外分组导致性能不佳
更好的解决方案: 使用 ANY_VALUE() 来选择 manager:
SELECT
  region,
  ANY_VALUE(manager) AS manager,  -- ✅ 可行
  SUM(sales_amount) AS total_sales
FROM sales
GROUP BY region;
结果:
| region | manager | total_sales |
|--------|---------|-------------|
| North  | Alice   | 27000.00    |
| South  | Bob     | 20000.00    |

