原料:
create table t_score( name varchar(20) ,
subject varchar(20),
score float
)
insert into `t_score` values查詢表的資料('王海', '語文', '86'),
('王海', '數學', '83'),
('王海', '英語', '93'),
('陶俊', '語文', '88'),
('陶俊', '數學', '84'),
('陶俊', '英語', '94'),
('劉可', '語文', '80'),
('劉可', '數學', '86'),
('劉可', '英語', '88'),
('李春', '語文', '89'),
('李春', '數學', '80'),
('李春', '英語', '87');
要求實現的效果
實現方法:
selectname 名字,
max(case
subject
when'語文
'then score end) '語文'
,
max(case
subject
when'數學
'then score
end) '數學'
,
max(case
subject
when'英語
'then score end) '英語'
,
sum(mark) score
from
t_score
group
by name;
# case subject when '語文' then score end
# 如果 subject 的值為 語文 時 取得相對應 的 成績值
# max( case subject when '語文' then score end)取得最大的值。
# 因為 使用 case subject when '語文' then score end 時 會生成 三條資料
#比如:
# 語文 數學 英語
# 80 null null
# title = subject,mark = score(懶得換欄位名了。)
結果:再查他們所有語文、數學、英語 成績的合計
select合起來:'total',
sum(case subject when'語文
'then score end
),
sum(case subject when'數學
'then score end
),
sum(case subject when'英語
'then score end
),
sum(score)
from t_score
結果:
selectname 名字,
case subject when'語文
'then score end'語文
',max(case subject when'數學
'then score end) '數學'
,
max(case subject when'英語
'then score end) '英語'
,
sum( score ) score
from t_score group
byname
union
allselect
'total',
sum(case subject when'語文
'then score end
),
sum(case subject when'數學
'then score end
),
sum(case subject when'英語
'then score end
),
sum( score )
from t_score;
結果:
mysql行列轉換 mysql行列轉換
1.一維轉二維 上圖為成績表中資料,現希望將資料轉換為下圖。靜態 轉化為二維表後的列名及列數是確定不變的,本例中即course只有數學 語文 英語這三門課。select s name,max if course 數學 score,0 as 數學,max if course 語文 score,0 as...
mysql行列轉換例子 mysql行列轉換示例
現把轉換方法列舉如下 1 縱表轉橫表 縱表結構 tablea name course grade 張三語文 張三數學 張三英語 李四語文 李四數學 橫表結構 tableb name 語文數學 英語張三 李四方法一 select name,sum case course when 語文 then gr...
MySQL 行列轉換
最近在慕課上 看mysql教程 裡面關於行轉列的教程不錯 貼上練習sql 做個記錄 簡單行轉列 select a.user name,sum b.kills from user1 a join user kills b on a.id b.user id group by user name cro...