存在表score,記錄學生的考試成績,如下圖所示:
現要求以 學生姓名,語文,數學,英語 這種格式顯示學生成績,如下圖所示
具體步驟如下:
1、首先,使用case when函式輸出單個課程的成績
case when course='語文' then score end as 語文
case when course='數學' then score end as 數學
case when course='英語' then score end as 英語
sql語句:
select name ,case when course='語文' then score end as 語文,
case when course='數學' then score end as 數學,
case when course='英語' then score end as 英語 from score;
輸出結果如下圖所示:
2、使用group by 和sum,去掉null得出課程的成績
sql語句:
select name ,sum(case when course='語文' then score end) as 語文,
sum(case when course='數學' then score end )as 數學,
sum(case when course='英語' then score end )as 英語
from score group by name;
輸出結果如下圖所示
就得出行轉列的輸出結果了
總結:在具體的生活場景中,使用學生姓名,課程1,課程2,課程3……的表結構是不太合理的,比如選修課,不可能每個學生都選一樣的課程,這種結構會存在浪費儲存空間的情況,比較好的做法就是一行表示乙個學生的某個課程的成績,再使用行轉列方法輸出想要的成績結構。
mysql 動態行轉列 MySQL行轉列
比如乙個單子,多個收據單用逗號隔開,怎麼把這乙個單子所有收據單獨展示出來,行轉成列呢?方法一 這裡需要用到迴圈,首先建立乙個1 10的序列 select rownum rownum 1 as seq from select rownum 0 r,bills limit 0,10 其次依次運用 sub...
mysql行轉列怎麼用 mysql錶行轉列的用法
現在有一張score表,儲存學生每門課的成績,結構資料如下 idnamesubjectscore 1張三 語文90 2張三 數學88 3張三 外語75 4李四 語文99 5李四 數學70 6李四 外語95 7李五 語文88 8李五 數學85 9李五 外語90 現在要求列出每個學生所有課程的成績.這就...
mysql單錶行轉列 mysql資料行轉列
在你找工作的經歷當中,是否有面試官問過你 資料庫行轉列如何實現?乙個典型的例子如下 有這樣乙個訂單表 om order 一條記錄包含訂單號 建立日期 訂單總金額 讓你統計不同年份對應各月份的銷售情況,要求每一年的銷售情況一行展示,效果如下 年份 一月 二月 三月 四月 五月 六月 七月 八月 九月 ...