长表转宽表场景中MAX聚合函数的工作原理探究
长表转宽场景中MAX聚合函数的工作原理
在这个长表转宽的场景里,MAX函数的核心作用是过滤NULL值,提取分组内的有效数据,具体工作流程可以拆成这几步:
- 首先,SQL里会用
CASE语句对长表的行数据做判断:比如按指标类别给不同的宽表列赋值,不匹配的行就返回NULL。比如长表里一行是"身高",那对应height列赋值,其他列(比如体重、年龄)就返回NULL。 - 接着按分组字段(比如用户ID)做分组聚合,这时候每个分组里,每个宽表列对应的行里只有一个非NULL值,剩下的都是NULL。
- MAX聚合函数的特性是忽略NULL值,只从非NULL值里取最大值。而这里每个分组的每个宽表列只有一个有效非NULL值,所以MAX就会直接把这个值保留下来,最终得到每行对应所有指标的宽表结构。
举个简单的例子,假设分组后某用户的行数据是:
| user_id | height | weight |
|---|---|---|
| 1 | 175 | NULL |
| 1 | NULL | 65 |
用MAX聚合后,就会得到:
| user_id | max(height) | max(weight) |
|---|---|---|
| 1 | 175 | 65 |
本质上就是利用MAX忽略NULL的特性,把分组内分散在不同行的有效数据,合并到同一行的对应列里。
内容的提问来源于stack exchange,提问作者hoozr
相关产品推荐
相关产品推荐

