mysql行列转换

一;列转行

 1:创建表

 CREATE TABLE `score` (
  `name` varchar(10) DEFAULT NULL,
  `course` varchar(10) DEFAULT NULL,
  `score` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

   

--->>>插入数据

INSERT INTO score(NAME, COURSE, SCORE) VALUES
("张三", "语文", 88),
("张三", "数学", 92),
("张三", "物理", 93),
("李四", "语文", 79),
("李四", "数学", 99),
("李四", "物理", 94)



查询 SELECT * FROM score

name    course   score  
------  ------  --------
张三      语文            88
张三      数学            92
张三      物理            93
李四      语文            79
李四      数学            99
李四      物理            94

2:转换语句

CREATE VIEW  aaa AS
SELECT NAME, 
SUM(CASE WHEN course = '语文' THEN score ELSE 0 END) AS "语文",
SUM(CASE WHEN course = '数学' THEN score ELSE 0 END) AS "数学",
SUM(CASE WHEN course = '物理' THEN score ELSE 0 END) AS "物理"
FROM score GROUP BY NAME;


select * from aaa;

NAME    语文  数学  物理  
------  ------  ------  --------
张三      88      92      93      
李四      79      99      94 
    



二:行转列(使用上面的aaa视图横表)

1.转换语句

SELECT NAME,'语文' course,语文 soure FROM aaa
UNION  SELECT NAME,'数学' course,数学 soure FROM aaa
UNION  SELECT NAME,'物理' course,物理 soure FROM aaa
ORDER BY NAME,course;

2.结果

name    course  soure   
------  ------  --------
张三      数学      92      
张三      物理      93      
张三      语文      88      
李四      数学      99      
李四      物理      94      
李四      语文      79      


三:拓展(GROUP_CONCAT(param)和group连用)

1语句:

SELECT NAME ,GROUP_CONCAT(course) courses ,GROUP_CONCAT(score) scores 

FROM score GROUP BY NAME;

2结果:

me    courses                scores    
------  -------------------  ----------
张三      语文,数学,物理            88,92,93  
李四      语文,数学,物理              79,99,94  










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值