如何在BigQuery中连接具有一对多关系的两张表
BigQuery 表连接并生成透视表解决方案
表结构说明
学生表
| 学号 | 姓名 |
|---|---|
| 101 | 张三 |
| 102 | 李四 |
| 103 | 王五 |
成绩表
| 学号 | 科目 | 成绩 |
|---|---|---|
| 101 | 语文 | 85 |
| 101 | 数学 | 90 |
| 102 | 语文 | 78 |
| 103 | 数学 | 92 |
目标表
| 学号 | 姓名 | 语文 | 数学 |
|---|---|---|---|
| 101 | 张三 | 85 | 90 |
| 102 | 李四 | 78 | null |
| 103 | 王五 | null | 92 |
实现SQL语句
使用BigQuery的PIVOT函数结合表关联即可生成目标结果:
WITH student_scores AS ( SELECT s.学号, s.姓名, sc.科目, sc.成绩 FROM `你的项目名.数据集名.学生表` s LEFT JOIN `你的项目名.数据集名.成绩表` sc ON s.学号 = sc.学号 ) SELECT * FROM student_scores PIVOT ( MAX(成绩) FOR 科目 IN ('语文' AS 语文, '数学' AS 数学) ) ORDER BY 学号;
关键说明
- 用
LEFT JOIN关联两张表,确保所有学生记录都被保留,无对应科目成绩时显示null PIVOT函数将科目列的离散值(语文、数学)转为独立列,通过MAX(成绩)聚合获取对应分数(因每个学生单科目仅一条成绩,MAX等价于直接取值)- 按学号排序保证结果顺序与目标表一致
内容的提问来源于stack exchange,提问作者Musa
相关产品推荐
相关产品推荐

