欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql 列转行

程序员文章站 2024-03-01 17:02:04
...

一、行转列

即将原本同一列下多行的不同内容分组作为多个字段,输出对应内容。

建表语句 

不建议加drop ,不是个好习惯,特别是在操作生产库的时候

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)
, ('001','数学',92) ,('001','英语',80),('002','语文',88), ('002','数学',90),
('002','英语',75.5),('003','语文',70),('003','数学',85), ('003','英语',90), ('003','政治',82);

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

 

SELECT * FROM tb_score

mysql 列转行

要转换的效果

mysql 列转行

 

可以看出,这里行转列是将原来的subject字段的有限的多行内容选出来,作为结果集中的列,并根据userid进行分组显示对应的score

SELECT userid,
SUM(CASE `subject` WHEN '语文' THEN score ELSE 0 END) as '语文',
SUM(CASE `subject` WHEN '数学' THEN score ELSE 0 END) as '数学',
SUM(CASE `subject` WHEN '英语' THEN score ELSE 0 END) as '英语',
SUM(CASE `subject` WHEN '政治' THEN score ELSE 0 END) as '政治' 
FROM tb_score 
GROUP BY userid

 

 

相关标签: mysql