MySQL DML操作--------实现pivot行转列功能最佳实战
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL DML操作--------实现pivot行转列功能最佳实战相关的知识,希望对你有一定的参考价值。
1. 背景
* 由于mysql 不支持类型Oracle与SQL Server的pivot功能进行行列转换。
2. 表与数据
mysql> select * from t_temp; +---------+-----------+------------+ | year | season | orderCount | +---------+-----------+------------+ | 2010年 | 一季度 | 100 | | 2010年 | 二季度 | 200 | | 2010年 | 三季度 | 300 | | 2010年 | 四季度 | 400 | | 2011年 | 一季度 | 150 | | 2011年 | 二季度 | 300 | | 2011年 | 三季度 | 450 | | 2011年 | 四季度 | 600 | +---------+-----------+------------+ 8 rows in set (0.00 sec)
3. 通过子查询与case when判断实现
mysql> select year, sum(orderCount1) ‘第一季度‘, -> sum(orderCount2) ‘第二季度‘, -> sum(orderCount3) ‘第三季度‘, -> sum(orderCount4) ‘第四季度‘ -> from -> ( -> select year, -> case when season = ‘一季度‘ then -> orderCount -> end orderCount1, -> case when season = ‘二季度‘ then -> orderCount -> end orderCount2, -> case when season = ‘三季度‘ then -> orderCount -> end orderCount3, -> case when season = ‘四季度‘ then -> orderCount -> end orderCount4 -> from t_temp -> ) t -> group by year; +---------+--------------+--------------+--------------+--------------+ | year | 第一季度 | 第二季度 | 第三季度 | 第四季度 | +---------+--------------+--------------+--------------+--------------+ | 2010年 | 100 | 200 | 300 | 400 | | 2011年 | 150 | 300 | 450 | 600 | +---------+--------------+--------------+--------------+--------------+ 2 rows in set (0.00 sec)
4. 通过IF聚合函数实现
mysql> SELECT year, -> SUM(IF(season = ‘一季度‘, orderCount, null)) AS ‘第一季度‘, -> SUM(IF(season = ‘二季度‘, orderCount, null)) AS ‘第二季度‘, -> SUM(IF(season = ‘三季度‘, orderCount, null)) AS ‘第三季度‘, -> SUM(IF(season = ‘四季度‘, orderCount, null)) AS ‘第四季度‘ -> FROM t_temp -> GROUP BY year; +---------+--------------+--------------+--------------+--------------+ | year | 第一季度 | 第二季度 | 第三季度 | 第四季度 | +---------+--------------+--------------+--------------+--------------+ | 2010年 | 100 | 200 | 300 | 400 | | 2011年 | 150 | 300 | 450 | 600 | +---------+--------------+--------------+--------------+--------------+ 2 rows in set (0.00 sec)
5. 总结
以需求驱动技术,技术本身没有优略之分,只有业务之分。
本文出自 “sea” 博客,请务必保留此出处http://lisea.blog.51cto.com/5491873/1949764
以上是关于MySQL DML操作--------实现pivot行转列功能最佳实战的主要内容,如果未能解决你的问题,请参考以下文章