mysql 列转行union all_sql:mysql:列转行(转为多个字段)

建表语句:

CREATE TABLE tb_score1(

id INT(11) NOT NULL auto_increment,

userid VARCHAR(20) NOT NULL COMMENT '用户id',

cn_score DOUBLE COMMENT '语文成绩',

math_score DOUBLE COMMENT '数学成绩',

en_score DOUBLE COMMENT '英语成绩',

po_score DOUBLE COMMENT '政治成绩',

PRIMARY KEY(id)

)ENGINE = INNODB DEFAULT CHARSET = utf8;

INSERT INTO tb_score1(userid,cn_score,math_score,en_score,po_score) VALUES ('001',90,92,80,0);

INSERT INTO tb_score1(userid,cn_score,math_score,en_score,po_score) VALUES ('002',88,90,75.5,0);

INSERT INTO tb_score1(userid,cn_score,math_score,en_score,po_score) VALUES ('003',70,85,90,82);

查询数据表中的内容(即转换前的结果):

65813835522720727dd4414de37a4b9c.png

先看一下转换后的效果:

993d513c5f9b97bffdc2c3c06b317861.png

本质是将userid的每个科目分数分散成一条记录显示出来。

SELECT userid,'语文' AS course,cn_score AS score FROM tb_score1

UNION ALL

SELECT userid,'数学' AS course,math_score AS score FROM tb_score1

UNION ALL

SELECT userid,'英语' AS course,en_score AS score FROM tb_score1

UNION ALL

SELECT userid,'政治' AS course,po_score AS score FROM tb_score1

ORDER BY userid

这里将每个userid对应的多个科目的成绩查出来,通过UNION ALL将结果集加起来,达到上图的效果。

附:UNION与UNION ALL的区别(摘):

1.对重复结果的处理:UNION会去掉重复记录,UNION ALL不会;

2.对排序的处理:UNION会排序,UNION ALL只是简单地将两个结果集合并;

3.效率方面的区别:因为UNION 会做去重和排序处理,因此效率比UNION ALL慢很多;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值