mysql 列转行 动态查询列

参考链接 https://cloud.tencent.com/developer/ask/223926 

建表语句 

create table tb_score(

    id int(11) not null auto_increment,

    userid varchar(20) not null comment '用户id',

    subject varchar(20) comment '科目',

    score double comment '成绩',

    primary key(id)

)engine = innodb default charset = utf8;

插入数据

insert into tb_score(userid,subject,score) values ('001','语文',90);

insert into tb_score(userid,subject,score) values ('001','数学',92);

insert into tb_score(userid,subject,score) values ('001','英语',80);

insert into tb_score(userid,subject,score) values ('002','语文',88);

insert into tb_score(userid,subject,score) values ('002','数学',90);

insert into tb_score(userid,subject,score) values ('002','英语',75.5);

insert into tb_score(userid,subject,score) values ('003','语文',70);

insert into tb_score(userid,subject,score) values ('003','数学',85);

insert into tb_score(userid,subject,score) values ('003','英语',90);

insert into tb_score(userid,subject,score) values ('003','政治',82);

       执行语句

set @sql = null;

select

  group_concat(distinct

    concat(

      "max(if(`subject` = '", `subject`, "',score,null)) as ", `subject`)

  ) into @sql

from tb_score;  #可在此处添加筛选条件 例如subject不为语文的 

 

set @sql = concat('select userid, ', @sql, '

                  from    tb_score 

                  group   by userid');

prepare stmt from @sql;

execute stmt;

deallocate prepare stmt;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值