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

?本帖子是行轉(zhuǎn)列的一個(gè)逆向操作——列轉(zhuǎn)行,看下面一個(gè)面試題

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

請(qǐng)點(diǎn)擊此處輸入圖片描述

下圖示:

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

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

結(jié)果如下:

請(qǐng)點(diǎn)擊此處輸入圖片描述

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

請(qǐng)點(diǎn)擊此處輸入圖片描述

點(diǎn)擊下一步,選擇保存位置,輸入保存的文件名

請(qǐng)點(diǎn)擊此處輸入圖片描述

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

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

選擇表,點(diǎn)擊右鍵選擇導(dǎo)入向?qū)?/p>

請(qǐng)點(diǎn)擊此處輸入圖片描述

選擇Excel文件,點(diǎn)擊下一步,選擇剛才保存的Excel文件,輸入要保存的表,進(jìn)行導(dǎo)入

請(qǐng)點(diǎn)擊此處輸入圖片描述

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

請(qǐng)點(diǎn)擊此處輸入圖片描述

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

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

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,然后行轉(zhuǎn)列

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

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

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

結(jié)果如下:

請(qǐng)點(diǎn)擊此處輸入圖片描述

今天就分享到這里了。如果大家覺得還不錯(cuò),就點(diǎn)個(gè)贊吧!!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容