mysql行转列的两种方法

建表语句:

create table tb(姓名 varchar(10),课程 varchar(10),分数 int)
insert into tb values('张三','语文',74)
insert into tb values('张三','数学',83)
insert into tb values('张三','物理',93)
insert into tb values('李四','语文',74)
insert into tb values('李四','数学',84)
insert into tb values('李四','物理',94)

第一种实现:case when

select * from tb
select 姓名,
max(case 课程 when '语文' then 分数 else 0 end)语文,
max(case 课程 when '数学'then 分数 else 0 end)数学,
max(case 课程 when '物理'then 分数 else 0 end)物理
from tb
group by 姓名

第二种实现:pivot函数

select * from tb pivot(max(分数) for 课程 in (语文,数学,物理))a

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL 中,可以使用以下方法将行数据转换为列数据: 1. GROUP_CONCAT() 函数:该函数可将多行数据合并为一行,并使用分隔符分隔开。 例如,有以下表结构: ``` CREATE TABLE scores ( id INT, student VARCHAR(10), subject VARCHAR(10), score INT ); INSERT INTO scores VALUES (1, 'Tom', 'Math', 80), (2, 'Tom', 'English', 75), (3, 'Tom', 'Science', 85), (4, 'Mike', 'Math', 90), (5, 'Mike', 'English', 85), (6, 'Mike', 'Science', 95); ``` 现在要将每个学生的成绩转换为列数据,可以使用以下查询语句: ``` SELECT student, GROUP_CONCAT(CASE WHEN subject = 'Math' THEN score END) AS math_score, GROUP_CONCAT(CASE WHEN subject = 'English' THEN score END) AS english_score, GROUP_CONCAT(CASE WHEN subject = 'Science' THEN score END) AS science_score FROM scores GROUP BY student; ``` 查询结果如下: ``` +---------+------------+---------------+--------------+ | student | math_score | english_score | science_score | +---------+------------+---------------+--------------+ | Mike | 90, | 85, | 95, | | Tom | 80, | 75, | 85 | +---------+------------+---------------+--------------+ ``` 2. PIVOT 操作符:该操作符可以用于将行数据转换为列数据。 例如,有以下表结构: ``` CREATE TABLE scores ( id INT, student VARCHAR(10), subject VARCHAR(10), score INT ); INSERT INTO scores VALUES (1, 'Tom', 'Math', 80), (2, 'Tom', 'English', 75), (3, 'Tom', 'Science', 85), (4, 'Mike', 'Math', 90), (5, 'Mike', 'English', 85), (6, 'Mike', 'Science', 95); ``` 现在要将每个学生的成绩转换为列数据,可以使用以下查询语句: ``` SELECT * FROM ( SELECT student, subject, score FROM scores ) AS t PIVOT ( MAX(score) FOR subject IN ('Math', 'English', 'Science') ) AS p; ``` 查询结果如下: ``` +---------+------+--------+---------+ | student | Math | English| Science | +---------+------+--------+---------+ | Mike | 90 | 85 | 95 | | Tom | 80 | 75 | 85 | +---------+------+--------+---------+ ``` 以上就是在 MySQL 中将行数据转换为列数据的两种方法
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值