【數(shù)據(jù)庫】SQL經(jīng)典面試題 - 行列轉換二 - 列轉行

?本帖子是行轉列的一個逆向操作——列轉行,看下面一個面試題

面試題2: 檸檬班第30期學生要畢業(yè)了,他們的Linux、MySQL、Java成績數(shù)據(jù)表 tb_lemon_grade_column中, 表中字段student_name,Linux,MySQL,Java分別表示學生姓名、Linux成績、MySQL成績、Java成績, 數(shù)據(jù)圖1所示。請寫出一條SQL,將圖1的數(shù)據(jù)變成圖2的形式(列轉行)

請點擊此處輸入圖片描述

下圖示:

1:使用上節(jié)課學的知識,獲得以列的形式展示的成績數(shù)據(jù)(行轉列)

SELECT?student_name,SUM(CASE?COURSE?when?'Linux'?THEN?SCORE?ELSE?0?END)?as

'Linux',SUM(CASE?COURSE?when?'MySQL'?THEN?SCORE?ELSE?0?END)?as?'MySQL',SUM(CASE

COURSE?when?'Java'?THEN?SCORE?ELSE?0?END)?as?'Java'FROM?tb_lemon_grade

結果如下:

請點擊此處輸入圖片描述

2:使用導出功能,將數(shù)據(jù)導入到Excel

請點擊此處輸入圖片描述

點擊下一步,選擇保存位置,輸入保存的文件名

請點擊此處輸入圖片描述

點擊下一步,點擊開始,講數(shù)據(jù)導入到本地

3:使用導入功能,將導出的Excel表導入到數(shù)據(jù)庫

選擇表,點擊右鍵選擇導入向導

請點擊此處輸入圖片描述

選擇Excel文件,點擊下一步,選擇剛才保存的Excel文件,輸入要保存的表,進行導入

請點擊此處輸入圖片描述

4:導入完成,就生成了一個表,查看下數(shù)據(jù)

請點擊此處輸入圖片描述

5:上面是使用導入本地文件的方式新建了一個表,并且把文件的數(shù)據(jù)也導入進來了,

如果是數(shù)據(jù)本身已經(jīng)存在數(shù)據(jù)庫中,我們還有更簡單的方法,使用的是創(chuàng)建表的CREATE TABLE語法,可以新建表,并且把結果集的數(shù)據(jù)也會初始化到新建表中,如下所示:

CREATE?TABLE?new_tables(SELECT?student_name,MAX(IF(COURSE?=?'Linux',SCORE,0))?'Linux',MAX(IF(COURSE?=?'MySQL',SCORE,0))?'MySQL',MAX(IF(COURSE?=?'Java',SCORE,0))?'Java'FROM?tb_lemon_grade

6:怎么列傳行呢?使用UNION ALL,然后行轉列

SELECT?student_name,'linux'?course,linux?score?FROM?tb_lemon_student2

7:我們想排下序怎么辦呢? 采用子查詢的方式(注意子查詢中的別名a,一定要寫上別名)

SELECT?student_name,'linux'?course,linux?score?from?tb_lemon_student2

結果如下:

請點擊此處輸入圖片描述

今天就分享到這里了。如果大家覺得還不錯,就點個贊吧!?。?!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容