MySQL DML操作--------实现pivot行转列功能最佳实战

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

1. 背景

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

wKiom1lxsSSxDTNgAAEQZy1NYpE561.jpg

2. 表与数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql>  select  from  t_temp;
+ ---------+-----------+------------+
year     | season    | orderCount |
+ ---------+-----------+------------+
| 2010年  | 一季度    |        100 |
| 2010年  | 二季度    |        200 |
| 2010年  | 三季度    |        300 |
| 2010年  | 四季度    |        400 |
| 2011年  | 一季度    |        150 |
| 2011年  | 二季度    |        300 |
| 2011年  | 三季度    |        450 |
| 2011年  | 四季度    |        600 |
+ ---------+-----------+------------+
rows  in  set  (0.00 sec)


3. 通过子查询与case when判断实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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 |
+ ---------+--------------+--------------+--------------+--------------+
rows  in  set  (0.00 sec)


4. 通过IF聚合函数实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 |
+ ---------+--------------+--------------+--------------+--------------+
rows  in  set  (0.00 sec)


5. 总结

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




      本文转自asd1123509133 51CTO博客,原文链接:http://blog.51cto.com/lisea/1949764,如需转载请自行联系原作者





相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
22天前
|
存储 SQL 关系型数据库
MySQL - 深入理解锁机制和实战场景
MySQL - 深入理解锁机制和实战场景
|
27天前
|
SQL 关系型数据库 MySQL
【MySQL】学习如何通过DML更新数据库的数据
【MySQL】学习如何通过DML更新数据库的数据
83 0
|
28天前
|
关系型数据库 MySQL
电子好书发您分享《MySQL MGR 8.0高可用实战》
电子好书发您分享《MySQL MGR 8.0高可用实战》 电子好书发您分享《MySQL MGR 8.0高可用实战》
22 1
|
29天前
|
关系型数据库 MySQL 数据库
深入MySQL数据库进阶实战:性能优化、高可用性与安全性
深入MySQL数据库进阶实战:性能优化、高可用性与安全性
54 0
|
29天前
|
SQL 关系型数据库 MySQL
MySQL数据库基础与实战应用
MySQL数据库基础与实战应用
33 0
|
22天前
|
监控 关系型数据库 MySQL
MySQL Binlog实战:在生产环境中的应用与最佳实践【实战应用】
MySQL Binlog实战:在生产环境中的应用与最佳实践【实战应用】
15 0
|
22天前
|
SQL 监控 关系型数据库
MySQL Binlog深度解析:进阶应用与实战技巧【进阶应用】
MySQL Binlog深度解析:进阶应用与实战技巧【进阶应用】
34 0
|
24天前
|
资源调度 JavaScript 关系型数据库
Node.js【文件系统模块、路径模块 、连接 MySQL、nodemon、操作 MySQL】(三)-全面详解(学习总结---从入门到深化)
Node.js【文件系统模块、路径模块 、连接 MySQL、nodemon、操作 MySQL】(三)-全面详解(学习总结---从入门到深化)
25 0
|
25天前
|
关系型数据库 MySQL 数据库连接
SPSS连接mysql数据库详细操作教程
SPSS连接mysql数据库详细操作教程
16 0
|
26天前
|
SQL Oracle 关系型数据库
【操作宝典】Navicat+MySQL:极简教程,轻松玩转数据库!
【操作宝典】Navicat+MySQL:极简教程,轻松玩转数据库!
42 1