本帖子是行轉列的一個逆向操作——列轉行,看下面一個面試題
面試題2:檸檬班第30期學生要畢業了,他們的Linux、MySQL、Java成績數據表 tb_lemon_grade_column中,表中字段student_name,Linux,MySQL,Java分別表示學生姓名、Linux成績、MySQL成績、Java成績,數據圖1所示。請寫出一條SQL,將圖1的數據變成圖2的形式(列轉行)
下圖示:
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
結果如下:
2:使用導出功能,將數據導入到Excel
點擊下一步,選擇保存位置,輸入保存的文件名
點擊下一步,點擊開始,講數據導入到本地
3:使用導入功能,將導出的Excel表導入到數據庫
選擇表,點擊右鍵選擇導入嚮導
選擇Excel文件,點擊下一步,選擇剛才保存的Excel文件,輸入要保存的表,進行導入
4:導入完成,就生成了一個表,查看下數據
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
結果如下:
今天就分享到這裡了。如果大家覺得還不錯,就點個贊吧!!!!
相關推薦
'分享Oracle的四道經典面試題,值得收藏'
"概述今天主要整理了4道Oracle 經典面試題,與大家分享學習。下面一起看看詳細的介紹吧第一題1、測試數據create table test( id number(10) primary key, type number(10) , t_id number(10), va...
MySQL數據庫學習之(基本的SQL語句)
主要內容:一、cmd命令行的常用命令二、數據定義語言(DDL)三、數據操縱語言(DML)四、數據查詢語言(DRL)五、事務控制語言(TCL)一、cmd命令...
數據庫大師成長日記:經典SQL語句大全,基礎部分,敬請收藏!
朋友們,對數據庫的操作,離不開對SQL語句的掌握。SQL本身是一種通用的數據庫語言,如果對常用的SQL語句不瞭解,每次操作都要在網上查,那可就費勁了。我這...
讓面試官顫抖,SQL面試題之行列轉換
SQL面試題之行列轉換在寫SQL時,行轉列是一個比較常見的問題,接下來我看一下 下面幾種情況。情況一,如何行轉列表結構如下:CREATE TABLE tb(姓名 VARCHAR(10),課程 VARCHAR(10),分數 INT);數據如下:希望轉換成如下的格式:思考10S...
超詳細的Java面試題總結(一)之Java基本知識
最近在備戰面試的過程中,整理一下面試題。大多數題目都是自己手敲的,網上也有很多這樣的總結。自己感覺總是很亂,所以花了很久把自己覺得重要的東西總結了一下。面向對象和麵向過程的區別面向過程:優點:性能比面向對象高,因為類調用時需要實例化,開銷比較大,比較消耗資源;比如單片機、嵌...
推薦中...