mysql+行转列case+when_mySql 行转列 列转行 case when

本文通过创建学生分数表,展示了如何使用MySQL的CASE WHEN语句进行行转列操作,将不同科目分数整合到同一行显示。同时,也演示了列转行的方法,将同一学生的不同科目分数拆分成多行展示。具体操作包括建表、插入测试数据,以及使用MAX和CASE WHEN结合GROUP BY实现行转列,使用UNION操作实现列转行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from https://www.jianshu.com/p/5a2dae144238

mark:

-- 建表

CREATE TABLE `student` (

`ID` int(10) NOT NULL AUTO_INCREMENT,

`USER_NAME` varchar(20) DEFAULT NULL,

`COURSE` varchar(20) DEFAULT NULL,

`SCORE` float DEFAULT '0',

PRIMARY KEY (`ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 测试数据

insert into student(USER_NAME, COURSE, SCORE) values

("张三", "数学", 34),

("张三", "语文", 58),

("张三", "英语", 58),

("李四", "数学", 45),

("李四", "语文", 87),

("李四", "英语", 45),

("王五", "数学", 76),

("王五", "语文", 34),

("王五", "英语", 89);

-- 行转列

SELECT user_name ,

MAX(CASE course WHEN '数学' THEN score ELSE 0 END ) 数学,

MAX(CASE course WHEN '语文' THEN score ELSE 0 END ) 语文,

MAX(CASE course WHEN '英语' THEN score ELSE 0 END ) 英语

FROM student

GROUP BY USER_NAME;

*****************************************************************************

-- 建表

CREATE TABLE `grade` (

`ID` int(10) NOT NULL AUTO_INCREMENT,

`USER_NAME` varchar(20) DEFAULT NULL,

`CN_SCORE` float DEFAULT NULL,

`MATH_SCORE` float DEFAULT NULL,

`EN_SCORE` float DEFAULT '0',

PRIMARY KEY (`ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 测试数据

insert into grade(USER_NAME, CN_SCORE, MATH_SCORE, EN_SCORE) values

("张三", 34, 58, 58),

("李四", 45, 87, 45),

("王五", 76, 34, 89);

-- 列转行 测试

select user_name, '语文' COURSE , CN_SCORE as SCORE from grade

union select user_name, '数学' COURSE, MATH_SCORE as SCORE from grade

union select user_name, '英语' COURSE, EN_SCORE as SCORE from grade

order by user_name,COURSE;

SELECT * FROM student;

23d351145f28770eea2bcb3ea1abf67e.png

SELECT user_name ,

MAX(CASE course WHEN '数学' THEN score ELSE 0 END ) 数学,

MAX(CASE course WHEN '语文' THEN score ELSE 0 END ) 语文,

MAX(CASE course WHEN '英语' THEN score ELSE 0 END ) 英语

FROM student GROUP BY USER_NAME;

0c5345f5ad801d4dacac2ac924ca8848.png

SELECT * FROM  grade;

2b4384018a84e05ec25f85ecf5cff902.png

SELECT user_name, '语文' COURSE , CN_SCORE AS  SCORE FROM grade

union SELECT user_name, '数学' COURSE, MATH_SCORE AS  SCORE FROM grade

union SELECT user_name, '英语' COURSE, EN_SCORE AS  SCORE FROM grade

ORDER BY  user_name,COURSE;

5fedfa3e37d08da4cd8e1b3ab97a022d.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值