ANY_VALUE
聚合函数。
ANY_VALUE() 函数从输入表达式中返回一个任意的非 NULL 值。当你在 GROUP BY 查询中需要选择一个未分组或未聚合的列时,可以使用该函数。
别名:
ANY()返回与ANY_VALUE()相同的结果,并且为了兼容性仍然可用。
语法
ANY_VALUE(<expr>)
参数
返回类型
<expr> 的类型。如果所有值都是 NULL,则返回值为 NULL。
示例
示例数据:
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) -- ❌ Error
FROM sales GROUP BY region;
旧方法: 将 manager 添加到 GROUP BY 中,但这会产生比所需更多的分组,并影响性能:
SELECT region, manager, SUM(sales_amount)
FROM sales GROUP BY region, manager; -- ❌ Poor performance due to extra grouping
更好的解决方案: 使用 ANY_VALUE() 选择 manager:
SELECT
region,
ANY_VALUE(manager) AS manager, -- ✅ Works
SUM(sales_amount) AS total_sales
FROM sales
GROUP BY region;
结果:
| region | manager | total_sales |
|--------|---------|-------------|
| North | Alice | 27000.00 |
| South | Bob | 20000.00 |