mysql行转列列合并_【Mysql】行转列合并字段

数据表:

943b62c0575146c59284b19602d4766a.png

列转行:利用max(case when then)

max---聚合函数 取最大值

(case coursewhen '语文' then scoreelse 0end)---判断

as 语文---别名作为列名

SELECT

`name`,

MAX(

CASE

WHEN course='语文' THEN

score

END

) AS 语文,

MAX(

CASE

WHEN course='数学' THEN

score

END

) AS 数学,

MAX(

CASE

WHEN course='英语' THEN

score

END

) AS 英语

FROM

student

GROUP BY `name`

;

d3f86f2ddee342ca1c3009f8b1b4f768.png

合并字段显示:利用group_concat(course,”:”,”score”)

SELECT

`name`,

GROUP_CONCAT(course, ":", score) AS 成绩

FROM

student

GROUP BY

`name`;

dc305f7480714f01c45500a60dc91504.png

group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果。

比较抽象,难以理解。

通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函

数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。

group_concat函数应该是在内部执行了group by语句,这是我的猜测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值