?本帖子是行轉(zhuǎn)列的一個逆向操作——列轉(zhuǎn)行侦锯,看下面一個面試題
面試題2: 檸檬班第30期學(xué)生要畢業(yè)了俱两,他們的Linux冒晰、MySQL缔御、Java成績數(shù)據(jù)表 tb_lemon_grade_column中惜颇, 表中字段student_name皆刺,Linux,MySQL凌摄,Java分別表示學(xué)生姓名羡蛾、Linux成績、MySQL成績锨亏、Java成績痴怨, 數(shù)據(jù)圖1所示。請寫出一條SQL器予,將圖1的數(shù)據(jù)變成圖2的形式(列轉(zhuǎn)行)
請點擊此處輸入圖片描述
下圖示:
1:使用上節(jié)課學(xué)的知識浪藻,獲得以列的形式展示的成績數(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é)果如下:
請點擊此處輸入圖片描述
2:使用導(dǎo)出功能,將數(shù)據(jù)導(dǎo)入到Excel
請點擊此處輸入圖片描述
點擊下一步乾翔,選擇保存位置爱葵,輸入保存的文件名
請點擊此處輸入圖片描述
點擊下一步,點擊開始,講數(shù)據(jù)導(dǎo)入到本地
3:使用導(dǎo)入功能萌丈,將導(dǎo)出的Excel表導(dǎo)入到數(shù)據(jù)庫
選擇表赞哗,點擊右鍵選擇導(dǎo)入向?qū)?/p>
請點擊此處輸入圖片描述
選擇Excel文件,點擊下一步辆雾,選擇剛才保存的Excel文件肪笋,輸入要保存的表,進行導(dǎo)入
請點擊此處輸入圖片描述
4:導(dǎo)入完成乾颁,就生成了一個表涂乌,查看下數(shù)據(jù)
請點擊此處輸入圖片描述
5:上面是使用導(dǎo)入本地文件的方式新建了一個表,并且把文件的數(shù)據(jù)也導(dǎo)入進來了英岭,
如果是數(shù)據(jù)本身已經(jīng)存在數(shù)據(jù)庫中湾盒,我們還有更簡單的方法,使用的是創(chuàng)建表的CREATE TABLE語法诅妹,可以新建表罚勾,并且把結(jié)果集的數(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尖殃,然后行轉(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é)果如下:
請點擊此處輸入圖片描述
今天就分享到這里了送丰。如果大家覺得還不錯,就點個贊吧3谇铩F黪铩!蟹略!