1.一维转二维
文章插图
上图为成绩表中数据,现希望将数据转换为下图 。
文章插图
①静态:转化为二维表后的列名及列数是确定不变的,本例中即course只有数学、语文、英语这三门课 。
select s_name,max(if(course="数学",score,0)) as 数学,max(if(course='语文',score,0)) as 语文,max(if(course='英语',score,0)) as 英语,sum(score) as 总分from grade group by s_name;
文章插图
②动态:转化为二维表后的列名及列数是可变的,本例中即course的课程数不确定 。
set @sql='';select@sql:=concat(@sql,'max(if(course='',course,'',score,0)) as ',course,',')from (select distinct course from grade) as a;set@strsql=concat('select s_name,',@sql,'sum(score)as 总分 from grade group by s_name;');prepare stmt from @strsql;execute stmt;deallocate prepare stmt;
文章插图
2.二维转一维
文章插图
上图为成绩表2中数据,现希望将数据转为成绩表1的数据 。
文章插图
【mysql行列转换】select name,'数学'as course,数学 as score from grade2union allselect name,'语文'as course,语文 as score from grade2union allselect name,'英语'as course,英语 as score from grade2order by name;
文章插图
推荐阅读
- mysql查询条件字段值末尾有空格也能查到数据问题
- MySQL性能指标实时监控--awk命令实现
- IP地址与二进制之间该如何转换?
- MySQL连表Update修改数据
- MySQL数据库的SQL预处理技术,优化数据库必备
- MySql 三大知识点,索引、锁、事务,原理分析
- MySQL基于GTID的多线程同步方案
- 11条MySQL规范,你知道的有几个? Java架构师追风 2019-08-28 16:36:08
- MySQL索引原理
- MySQL、SQL Server、Oracle对比,你必须了解的三大数据库区别