ClickHouse中基于聚合字段计算衍生字段的正确方法
正确实现方案
源表数据
| id | A | B |
|---|---|---|
| aaa | 0 | 1 |
| aaa | 0 | 1 |
| aaa | 1 | 0 |
| bbb | 0 | 1 |
目标表数据
| id | A | B | C |
|---|---|---|---|
| aaa | 1 | 2 | 1 |
| bbb | 0 | 1 | 0 |
核心逻辑
必须先按id完成聚合计算出汇总后的A和B,再基于这两个汇总值判断C。你之前的错误大概率是提前在单条数据层面计算了C,而非基于聚合后的结果。
正确SQL语句
SELECT id, SUM(A) AS A, SUM(B) AS B, CASE WHEN SUM(A) > 0 AND SUM(B) >= 2 THEN 1 ELSE 0 END AS C FROM 你的表名 GROUP BY id;
说明
- 通过
GROUP BY id按分组,用SUM()分别计算每个id的A、B总和 - 用
CASE语句基于聚合后的A和B值判断C:满足A>0且B>=2返回1,否则返回0 - 若使用物化视图,直接将上述SQL作为视图定义即可,确保聚合逻辑优先于C字段的计算
内容的提问来源于stack exchange,提问作者Егор Лебедев
相关产品推荐
相关产品推荐

