?本帖子是行轉列的一個逆向操作——列轉行,看下面一個面試題
面試題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
結果如下:
請點擊此處輸入圖片描述
今天就分享到這里了。如果大家覺得還不錯,就點個贊吧!?。?!