mysql--怎么行转列

由于之前的工作离家太远,一年回家也就两次,对于一个看重家庭的男人,过了年关之后,想找一个离家近的工作。于是,我和成千上万急忙找工作的人一样,在网上投些自己比较满意的公司,然后等待信息--通知面试--面试。几天之内,面试了好几家,心情是五味杂陈,我相信就算一个工作经验丰富的去面试也会碰到自己难以回答、或者回答不是很满意的技术问题。

今天我去一家技术公司面试,当时一个小房间除了我和面试官,其中,那个面试官打通了在深圳的同事,通过聊天,我感觉他绝对是一个很有工作经验的人物。那个电话里头的面试官问我好多问题--比如:ArrayList和LinkedList的区别、==和equals的区别、堆和栈的区别、SpringMVC的流程、Mybatis框架中mapper.xml里面常用的关键词、怎么获取input标签里面的属性、锁机制等等,我回答的都比较不错,最后问我你的sql语句怎么样,我很有自信的说-可以,然后他发过来一道题,看到之后有点紧张了,自己思考之后写了出来,但是感觉不对,那个面试官对我说你sql语句写的不对,到最后我问了些问题,就回去了,心想肯定没戏。

这道题是这样的

学生表student
namesubjectscore
张三语文90
张三数学70
张三英语60
李四语文80
李四数学75
李四英语85

sql语句执行之后,结果如下:

name语文数学英语
张三907060
李四807585

在回家的路上,我一直再考虑这个问题,也深深自责,功亏一篑,但是疼定思痛,回来自己专门新建一个数据库表,自己写一下自己的语句,还真是错误的。然后,百度一下,才知道这是考察的sql语句中的行转列!!!!!!!!!!!!

在sqlServer中可以使用PIVOT关键字进行行转列

Mysql语句中需要使用case when关键字

第一步:case when 函数输出单个课程的成绩,结果如下:

sql语句:

SELECT name,

CASE WHEN subject='语文' THEN score END as 语文,

CASE WHEN subject='数学' THEN score END as 数学,

CASE WHEN subject='英语' THEN score END as 英语

FROM test;

第二步:使用group by和sum去掉null 得出最后的成绩

sql语句:

SELECT name,
SUM(CASE WHEN subject='语文' THEN score END) as 语文,
SUM(CASE WHEN subject='数学' THEN score END) as 数学,
SUM(CASE WHEN subject='英语' THEN score END) as 英语
FROM test GROUP BY name;

结果为:

给他家留下一个悬念:当我使用其他聚合函数如:max()、avg()函数都可以得到同样的情况,而count()不可以,是什么原因?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值