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
要转换的效果
可以看出,这里行转列是将原来的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