Mysql:mysql行轉列(數值行和字元行)
阿新 • • 發佈:2022-12-09
數值行轉列
建表
DROP TABLE IF EXISTS tb_score;
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); INSERT INTO tb_score(userid,subject,score) VALUES ('001','數學',92); INSERT INTO tb_score(userid,subject,score) VALUES ('001','英語',80); INSERT INTO tb_score(userid,subject,score) VALUES ('002','語文',88); INSERT INTO tb_score(userid,subject,score) VALUES ('002','數學',90); INSERT INTO tb_score(userid,subject,score) VALUES ('002','英語',75.5); INSERT INTO tb_score(userid,subject,score) VALUES ('003','語文',70); INSERT INTO tb_score(userid,subject,score) VALUES ('003','數學',85); INSERT INTO tb_score(userid,subject,score) VALUES ('003','英語',90); INSERT INTO tb_score(userid,subject,score) VALUES ('003','政治',82);
轉換
select
userid,
sum(case when subject='語文' then score else 0 end) as `語文`,
sum(case when subject='數學' then score else 0 end) as `數學`,
sum(case when subject='英語' then score else 0 end) as `英語`,
sum(case when subject='政治' then score else 0 end) as `政治`
from tb_score
group by userid
字元行轉列
建表
CREATE TABLE `tb_basics` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL COMMENT '使用者名稱', `skillType` varchar(20) DEFAULT NULL COMMENT '技能型別', `skillName` varchar(20) DEFAULT NULL COMMENT '技能', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
新增資料
INSERT INTO `tb_basics`(`id`, `name`, `skillType`, `skillName`) VALUES (1, '張三', '平A', '大逼兜'); INSERT INTO `tb_basics`(`id`, `name`, `skillType`, `skillName`) VALUES (2, '張三', '小絕', '退退退!'); INSERT INTO `tb_basics`(`id`, `name`, `skillType`, `skillName`) VALUES (3, '張三', '大招', '閃電五連鞭'); INSERT INTO `tb_basics`(`id`, `name`, `skillType`, `skillName`) VALUES (4, '李四', '平A', '掃堂腿'); INSERT INTO `tb_basics`(`id`, `name`, `skillType`, `skillName`) VALUES (5, '李四', '小絕', '洪家鐵線拳'); INSERT INTO `tb_basics`(`id`, `name`, `skillType`, `skillName`) VALUES (6, '李四', '大招', '齊眉棍'); INSERT INTO `tb_basics`(`id`, `name`, `skillType`, `skillName`) VALUES (7, '王五', '平A', '縮骨功'); INSERT INTO `tb_basics`(`id`, `name`, `skillType`, `skillName`) VALUES (8, '王五', '小絕', '八卦掌'); INSERT INTO `tb_basics`(`id`, `name`, `skillType`, `skillName`) VALUES (9, '王五', '大招', '玄冥神掌');
轉換
select
name,
GROUP_CONCAT(case when skillType='平A' then skillName end Separator ',') as `平A`,
GROUP_CONCAT(case when skillType='小絕' then skillName end Separator ',') as `小絕`,
GROUP_CONCAT(case when skillType='大招' then skillName end Separator ',') as `大招`
from tb_basics
group by name