You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ClickHouse不同版本聚合列别名解析行为差异咨询

ClickHouse聚合列别名处理的版本差异解析

问题概述

现有ClickHouse 24.1.1.2048实例,迁移至24.3.2.23(及24.6.1.4423)版本时,发现聚合列别名的查询行为存在明显差异,需明确该差异是操作错误还是特性变更导致。

测试环境与数据

测试表结构及初始化数据如下:

create table t (code varchar(10), val int) engine=Memory;
insert into t values ('a', 10);
insert into t values ('a', 20);
insert into t values ('a', 30);
insert into t values ('b', 11);

不同版本的行为表现

24.1.1.2048版本

  • 查询1(使用聚合结果别名计算avg)
    执行以下语句可正常得到预期结果:
SELECT code, SUM(val) AS val, val / COUNT(1) AS avg 
FROM t 
GROUP BY code;

查询结果:

codevalavg
b1111
a6020
  • 查询2(聚合函数直接参与运算)
    执行以下语句触发合理报错:
SELECT code, SUM(val) AS val, SUM(val) / COUNT(1) AS avg 
FROM t 
GROUP BY code;

报错信息:

Code: 184. DB::Exception: Aggregate function sum(val) is found inside another aggregate function in query: While processing sum(val) AS val. (ILLEGAL_AGGREGATION) (version 24.1.1.2048 (official build))

24.3.2.23及24.6.1.4423版本

  • 查询1(使用聚合结果别名计算avg)
    执行原语句触发报错:
SELECT code, SUM(val) AS val, val / COUNT(1) AS avg 
FROM t 
GROUP BY code;

报错信息:

Code: 215. DB::Exception: Column dt.t.val is not under aggregate function and not in GROUP BY keys. In query SELECT code, sum(val) AS val, val / count(1) AS avg FROM t GROUP BY code. (NOT_AN_AGGREGATE) (version 24.3.2.23 (official build))

  • 查询2(聚合函数直接参与运算)
    执行该语句可正常得到预期结果:
SELECT code, SUM(val) AS val, SUM(val) / COUNT(1) AS avg 
FROM t 
GROUP BY code;

查询结果:

codevalavg
b1111
a6020

差异原因说明

该差异是ClickHouse的特性变更,而非操作错误:

  1. SQL标准合规性调整:24.1版本中支持在同层级SELECT子句中引用聚合结果的别名,属于ClickHouse的非标准扩展;24.3及后续版本为了严格遵循SQL标准(SQL标准规定SELECT子句中定义的别名不能被同层级的其他表达式引用),移除了该扩展支持,因此查询1中val / COUNT(1)会被解析为原始表的val列,而非聚合后的别名val,触发NOT_AN_AGGREGATE报错。
  2. 聚合逻辑判断修复:24.1版本错误地将SUM(val)/COUNT(1)判定为聚合函数嵌套(属于非法聚合),而实际上这是聚合结果之间的算术运算,不属于嵌套聚合。24.3及后续版本修正了该判断逻辑,允许此类运算正常执行,因此查询2可正常返回结果。

内容的提问来源于stack exchange,提问作者Joker Bean.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:32:09