mysql 列轉行
阿新 • • 發佈:2020-12-17
技術標籤: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