?本帖子是行轉(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è)贊吧!!!!