MYSQL行转列学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


MYSQL行转列

数据库数据
在这里插入图片描述
预期结果
在这里插入图片描述
在写SQL语句前应该先去了解CASE的用法

一、CASE的用法

1.简单函数
case [ column_name ] when [ value ] then [ result ] else [ default ] end

2.搜索函数
case when [ expr ] then [ result ] else [ default ] end

举例说明

1.简单函数

行转列用到的是简单的case函数
代码如下(示例):

select name, 
		(case cname when '语文' then score end)语文,
		(case cname when '数学' then score else 0 end)数学
from hzl; 

执行结果
在这里插入图片描述
此时,已经基本上实现了行转列。到这一步时,我们应该使用Max,Sum函数来进行优化。
注意:在使用Max,Sum,Count等函数时,要与GROUP BY 搭配使用,否则会报错。SQL语句结尾要加上分号,否则也可能会报错。

Max函数

select name, 
		max(case cname when '语文' then score end)语文,
		max(case cname when '数学' then score else 0 end)数学
from hzl
group by name;

结果
在这里插入图片描述

Sum函数

select name, 
		sum(case cname when '语文' then score end)语文,
		sum(case cname when '数学' then score else 0 end)数学
from hzl
group by name;

结果
在这里插入图片描述

二、IF的用法

1.IF的语法

  IF( expr1 , expr2 , expr3 )

expr1 的值为 TRUE,则返回值为 expr2
expr1 的值为FALSE,则返回值为 expr3

2.用法

select name, 
		if(cname = '语文',score,0)as '语文',
		if(cname = '数学',score,0)as '数学' 
from hzl;

结果
在这里插入图片描述
同样的,这里已经基本实现了行转列,我们同样要使用Sum,Max函数进行优化。
注意:与GROUP BY 搭配使用。

Max

select name, 
		max(if(cname = '语文',score,0))as '语文',
		max(if(cname = '数学',score,0))as '数学' 
from hzl
group by name;

结果
在这里插入图片描述

Sum

select name, 
		sum(if(cname = '语文',score,0))as '语文',
		sum(if(cname = '数学',score,0))as '数学' 
from hzl
group by name;

结果
在这里插入图片描述

总结

在进行行转列时,先使用CASE或者IF函数进行初步的实现,然后再配合SUM、MAX函数进行优化。配合SUM、MAX函数时应注意要与GROUP BY 一起使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值