关于mysql 对 行转列,列转行的sql 编写,只用case when的写法
现有一组数据如下,该组数据网上随便找的,具体参考业务需求
利用SQL达到如下效果
实现语句
select name,max(case when subject=‘chinese’ then score end )chinese,max(case when subject=‘english’ then score end) english,max(case when subject=‘math’ then score end) math from hl group by name;
注意此处为什么要加max()函数,是因为我们case when后 没有匹配到的地方会以null值呈现,就像下面这种情况(没用group by是方便大家理解)
所以用max取每列的最大值(即有数据的那一行)
如果反过来的话该怎么样处理呢
转换成
实现语句
select name,‘chinese’ subject,chinese from lh union all select name,‘english’ subject,english from lh union all select name,‘math’ subject,math from lh;
这里用到了 union all
关于union all 和 union的区别,这里也简单提一下
union all是直接连接
union 是取并集,即重复的数据只出现一次
还有一个有趣的函数 PIVOT(UNPIVOT) 如果有兴趣的也可以去找找资料,希望该篇文章能够帮助大家解决问题