如何在ClickHouse中按部分列分组并返回全列及COUNT聚合结果?
需求实现方案
完全可以在ClickHouse中实现这个需求,核心是利用窗口函数计算分组内的学生数量,无需额外子查询或关联操作。
实现思路
通过COUNT() OVER (PARTITION BY University, Program)窗口函数,按University和Program对数据分组,统计每个分组内的学生总数,并将该统计值附加到每一行对应的记录中,同时保留原表所有列。
示例查询语句
假设你的表名为student_records,执行以下SQL即可得到期望结果:
SELECT -- 保留原表所有列,也可明确列出需要的列:University, Student, Program *, COUNT(Student) OVER (PARTITION BY University, Program) AS student_count FROM student_records;
效果说明
PARTITION BY University, Program:将数据按「大学+专业」维度拆分分组COUNT(Student):统计每个分组内的学生数量- 窗口函数会自动将分组统计的
student_count值匹配到该分组的每一行记录上,最终返回包含原表所有列和新增统计字段的结果集。
示例验证
如果原表数据如下:
| University | Student | Program |
|---|---|---|
| 清华大学 | 张三 | 计算机科学 |
| 清华大学 | 李四 | 计算机科学 |
| 清华大学 | 王五 | 应用数学 |
| 北京大学 | 赵六 | 物理学 |
执行查询后会得到:
| University | Student | Program | student_count |
|---|---|---|---|
| 清华大学 | 张三 | 计算机科学 | 2 |
| 清华大学 | 李四 | 计算机科学 | 2 |
| 清华大学 | 王五 | 应用数学 | 1 |
| 北京大学 | 赵六 | 物理学 | 1 |
内容的提问来源于stack exchange,提问作者exquisitecharm
相关产品推荐
相关产品推荐

