楼主: 时光人
595 0

mysql行列转换 [推广有奖]

  • 3关注
  • 34粉丝

院士

23%

还不是VIP/贵宾

-

威望
1
论坛币
26907 个
通用积分
428.9260
学术水平
95 点
热心指数
109 点
信用等级
91 点
经验
39960 点
帖子
1629
精华
3
在线时间
579 小时
注册时间
2019-2-25
最后登录
2023-4-26

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

CDA网校:数据科学、人工智能从业者的在线大学。

数据科学(Python/R/Julia)数据分析、机器学习、深度学习


1.一维转二维

上图为成绩表中数据,现希望将数据转换为下图。

①静态:转化为二维表后的列名及列数是确定不变的,本例中即course只有数学、语文、英语这三门课。

select s_name,

max(if(course="数学",score,0)) as 数学,

max(if(course='语文',score,0)) as 语文,

max(if(course='英语',score,0)) as 英语,

sum(score) as 总分

from grade group by s_name;

②动态:转化为二维表后的列名及列数是可变的,本例中即course的课程数不确定。

set @sql='';

select@sql:=concat(@sql,'max(if(course=\'',course,'\',score,0)) as ',course,',')from (select distinct course from grade) as a;

set@strsql=concat('select s_name,',@sql,'sum(score)as 总分 from grade group by s_name;');

prepare stmt from @strsql;

execute stmt;

deallocate prepare stmt;

2.二维转一维

上图为成绩表2中数据,现希望将数据转为成绩表1的数据。

select name,'数学'as course,数学 as score from grade2

union all

select name,'语文'as course,语文 as score from grade2

union all

select name,'英语'as course,英语 as score from grade2

order by name;






二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MySQL sql Distinct prepare EXECUTE

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 03:10