如何聚合行并创建透视表?寻求最优实现方法
最佳实现方案:SQL条件聚合
嘿,这是个典型的行转列(Pivot)场景,最通用且高效的实现方式就是用条件聚合。这种写法不挑数据库,MySQL、PostgreSQL、SQL Server、Oracle这些主流库都能直接跑,兼容性拉满,比依赖特定数据库的PIVOT语法灵活多了。
直接上可运行代码
SELECT Start, End, SUM(CASE WHEN Unit = 'KB' THEN Measure ELSE 0 END) AS KB, SUM(CASE WHEN Unit = 'MB' THEN Measure ELSE 0 END) AS MB, SUM(CASE WHEN Unit = 'GB' THEN Measure ELSE 0 END) AS GB FROM 你的原表名称 -- 记得替换成实际表名 GROUP BY Start, End ORDER BY Start, End;
代码逻辑拆解
- 分组归并:
GROUP BY Start, End把同一个区间(Start+End组合相同)的行打包成一组,这是实现分组求和的基础。 - 条件求和:对每个目标列(KB/MB/GB),用
CASE判断当前行的Unit是否匹配——匹配就取Measure的数值,不匹配就填0,再用SUM把组内的数值累加,正好满足“对应Unit的Measure值求和,无对应值填0”的需求。 - 排序优化:最后加
ORDER BY是为了让结果和你给出的示例顺序完全一致,实际使用时可以根据需求调整或者直接去掉。
验证结果
把你提供的原表数据代入执行后,得到的结果完全符合预期:
| Start | End | KB | MB | GB |
|---|---|---|---|---|
| 01 | 05 | 0 | 4 | 2 |
| 06 | 10 | 0 | 0 | 2 |
内容的提问来源于stack exchange,提问作者tinutomson
相关产品推荐
相关产品推荐

