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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

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
相关文章
|
1天前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL版集群版本支持库表恢复功能的版本要求是什么?
【5月更文挑战第13天】PolarDB MySQL版集群版本支持库表恢复功能的版本要求是什么?
8 0
|
4天前
|
SQL 关系型数据库 MySQL
DQL操作MySql
DQL操作MySql
9 0
|
4天前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
13天前
|
SQL 关系型数据库 MySQL
【MySQL-7】DML的表操作详解:添加数据&修改数据&删除数据(可cv例题语句)
【MySQL-7】DML的表操作详解:添加数据&修改数据&删除数据(可cv例题语句)
|
13天前
|
SQL 关系型数据库 MySQL
【MySQL-4】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)
【MySQL-4】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)
|
13天前
|
SQL 存储 关系型数据库
【MySQL】DDL的表操作详解:创建&查询&修改&删除
【MySQL】DDL的表操作详解:创建&查询&修改&删除
|
14天前
|
缓存 关系型数据库 MySQL
MySQL数据库性能优化实战
【4月更文挑战第30天】本文探讨了MySQL性能优化实战技巧,包括硬件与配置优化(如使用SSD、增加内存和调整配置参数)、索引优化(创建合适索引、使用复合索引及定期维护)、查询优化(避免全表扫描、减少JOIN和使用LIMIT)、分区与分片(表分区和数据库分片),以及使用缓存、定期清理数据库和监控诊断。通过这些方法,可以提升数据库性能和响应速度。
|
14天前
|
SQL DataWorks 关系型数据库
DataWorks操作报错合集之DataWorks在同步mysql时报错Code:[Framework-02],mysql里面有个json类型字段,是什么原因导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
30 0
|
14天前
|
关系型数据库 MySQL Java
使用shardingjdbc执行MySQL游标操作时报错
使用shardingjdbc执行MySQL游标操作时报错
|
14天前
|
存储 SQL 关系型数据库
mysql查询数据库表大小怎么操作
mysql查询数据库表大小怎么操作