MySQL DML操作--------实现pivot行转列功能最佳实战
admin
2023-05-17 06:22:21
0

1. 背景

  * 由于MySQL 不支持类型Oracle与SQL Server的pivot功能进行行列转换。

MySQL DML操作--------实现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. 总结

以需求驱动技术,技术本身没有优略之分,只有业务之分。

相关内容

热门资讯

“你头发都白了”,同守广西边防... “你头发都白了,模样还是没变,就是没有年轻时候那么帅了。”
小米手机再度涨价:旗舰最高上涨... 8月2日,小米商城价格更新,多款主力机型上调300元至500元不等。其中,REDMI Turbo 5...
“真实社交”售卖“优先访问权”... 据了解,购买这项服务的企业能够直接接入“真实社交”数据源,辅以人工智能技术解读信息,进而提前把握市场...
原创 狂... 英伟达正式官宣与 Safe Superintelligence(SSI)达成长期战略合作,总投资规模...
马斯克最新预言来了,钱要没用了... “以法莲是商人,手里有诡诈的天平,爱行欺骗!”——圣经 据红星新闻报道,本月,埃隆·马斯克在接受专...
遭欧盟22国“围攻”,西班牙怒... 西班牙首相桑切斯与22个欧盟成员国领导人激烈交锋后,由轮值主席国爱尔兰正式召集,欧盟将于本周二(8月...
创维电视42d9指示灯不亮 1、可能为电源插座插头的故障。2、可能为电源连接线的故障。3、可能为电视内部开关电源电路出了故障。4...
电视不通电指示灯不亮是什么原因 因为电源适配器发生了故障,就会导致电视不通电指示灯不亮;当然了,电视机也会因为开机的电源电路发生异常...
天然气灶电子打火一直不停 天然气灶电子打火一直不停发生这个现象大概率是因为打火装置发生了故障。天然气灶是通过高压电子发动打火装...
天然气打火灶打不着火 1、可能是电池没有电或者是天然气没有气了。2、天然气的管道出现了堵塞,就会导致天然气打火灶打不着火的...