1. 程式人生 > 其它 >mysql 列轉行

mysql 列轉行

技術標籤:mysql

一、行轉列

即將原本同一列下多行的不同內容分組作為多個欄位,輸出對應內容。

建表語句

不建議加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