Mysql:使用case when then end 實現行列轉換


1、創建一張表,我們這表名為 t_score

drop table if exists t_score;
create table t_score
(
	id int primary key auto_increment,
	name varchar(20),
	course varchar(20),
	score double
) default charset = utf8;

2、添加若干條數據

insert into `t_score`(name,course,score) values
    ('王海', '語文', 86),
    ('王海', '數學', 83),
    ('王海', '英語', 93),
    ('陶俊', '語文', 88),
    ('陶俊', '數學', 84),
    ('陶俊', '英語', 94),
    ('劉可', '語文', 80),
    ('劉可', '數學', 86),
    ('劉可', '英語', 88),
    ('李春', '語文', 89),
    ('李春', '數學', 80),
    ('李春', '英語', 87);

3、用case when then end 函數進行查詢

SELECT name,
max(CASE course WHEN '語文' THEN score ELSE 0 END ) Chinese,
max(CASE course WHEN '數學' THEN score ELSE 0 END ) math,
max(CASE course WHEN '英語' THEN score ELSE 0 END ) English,
sum(score) score
FROM t_score  
GROUP BY name
union
select 'TOTAL',
sum(CASE course WHEN '語文' THEN score ELSE 0 END ),
sum(CASE course WHEN '數學' THEN score ELSE 0 END ),
sum(CASE course WHEN '英語' THEN score ELSE 0 END ),
sum(score) from t_score;

效果圖:

 

另一種方法獲取所需結果

利用with rollup 給結果集新添一行,再使用ifnull過程函數判斷name的值是否為空

select ifnull(name,'TOTAL') name,
sum(CASE course WHEN '語文' THEN score ELSE 0 END ) Chinese,
sum(CASE course WHEN '數學' THEN score ELSE 0 END ) math,
sum(CASE course WHEN '英語' THEN score ELSE 0 END ) English,
sum(score) score
FROM t_score  
GROUP BY name with rollup;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM