數據庫之SQL經典面試題-行列轉換二-列轉行

SQL MySQL 編程語言 Linux 檸檬班軟件測試 檸檬班軟件測試 2017-08-29

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

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

數據庫之SQL經典面試題-行列轉換二-列轉行

下圖示:

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

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

結果如下:數據庫之SQL經典面試題-行列轉換二-列轉行

2:使用導出功能,將數據導入到Excel

數據庫之SQL經典面試題-行列轉換二-列轉行

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

數據庫之SQL經典面試題-行列轉換二-列轉行

點擊下一步,點擊開始,講數據導入到本地

3:使用導入功能,將導出的Excel表導入到數據庫

選擇表,點擊右鍵選擇導入嚮導數據庫之SQL經典面試題-行列轉換二-列轉行

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

數據庫之SQL經典面試題-行列轉換二-列轉行

4:導入完成,就生成了一個表,查看下數據

數據庫之SQL經典面試題-行列轉換二-列轉行

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

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

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

結果如下:

數據庫之SQL經典面試題-行列轉換二-列轉行

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

相關推薦

推薦中...