
SQL經典面試題 - 行列轉換
在我們的實際工作中,為了研發出功能完整、系統健壯的軟件,需要我們測試人員想法設法的去挑出軟件的問題,所以很多公司對測試人員的要求甚至高于開發人員,而通過SQL語句的編寫,測試人員可以去進行數據查詢、數據正確性完整性驗證、構造測試數據、或者行破壞測試或壓力測試。因此,作為一個測試人員,掌握SQL的重要性就不言而喻了。在我們的面試過程中,會碰到各種數據庫或者編寫SQL的面試題。
來看下面這道難倒眾生的經典面試題
面試題:行列轉換
檸檬班第30期學生要畢業了,他們Linux、MySQL、Java成績保存在數據表 tb_lemon_grade中,表中字段id,student_name,course,score分別表示成績id,學生姓名,課程名稱,課程成績,表中數據表1所示。請寫出一條SQL,將表1的數據變成表2的形式
id 學生姓名 課程名稱 課程成績
1 張三 Linux 85
2 張三 MySQL 92
3 張三 Java 87
4 李四 Linux 96
5 李四 MySQL 89
6 李四 Java 100
7 王五 Linux 91
8 王五 MySQL 83
9 王五 Java 98
表1
學生姓名 Linux MySQL Java
張三 85 92 87
李四 96 89 100
王五 91 83 98
表2
一:創建表
CREATE TABLE tb_lemon_grade (
id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
student_name VARCHAR(20) DEFAULT NULL,
course VARCHAR(20) DEFAULT NULL,
score FLOAT DEFAULT '0');
二:初始化數據
INSERT INTO tb_lemon_grade (student_name, course, score) VALUES
("張三", "Linux", 85),
("張三", "MySQL", 92),
("張三", "Java", 87),
("李四", "Linux", 96),
("李四", "MySQL", 89),
("李四", "Java", 100),
("王五", "Linux", 91),
("王五", "MySQL", 83),
("王五", "Java", 98);
三:首先我們查詢出所有數據,這個結果和我們的圖1是一樣的
select * from tb_lemon_grade;
四:使用常量列輸出我們的目標結構
可以看到結果已經和我們的圖二非常接近了
五:使用IF函數,替換我們的常量列,將成績賦值到對應行的對應列
SELECT student_name,
IF(COURSE = 'Linux',SCORE,0) 'Linux',
IF(COURSE = 'MySQL',SCORE,0) 'MySQL',
IF(COURSE = 'Java',SCORE,0) 'Java'
FROM tb_lemon_grade;
運行SQL,結果如下所示:
六:我們來分析這個結果集,
在原始結構中,每一行表示了某個同學某一個科的成績,以第一行為例,第一行是張三同學Linux的成績,所以我們結果集中Linux有成績為85,而其他兩列MySQL和Java作為常量列,成績為0。
再分析每個同學的成績的所有行,如下圖所示,每個方塊內包含行中,就有該同學這門課程的成績,并且該方塊內其余行的成績值為0。因此,不難想到,我們可以使用分組,通過分組提取出每科的成績
七:分組,使用MAX函數取出最大值
(因為其中只有一行成績為真實成績,其他行值為0,所以最大值就是真實成績)
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
GROUP BY student_name;
八:也可以分組后,對每行數據進行求和,使用SUM函數,語句和結果如下:
SELECT student_name,
SUM(IF(COURSE = 'Linux',SCORE,0)) 'Linux',
SUM(IF(COURSE = 'MySQL',SCORE,0)) 'MySQL',
SUM(IF(COURSE = 'Java',SCORE,0)) 'Java'
FROM tb_lemon_grade
GROUP BY student_name;
九:既然使用IF語句可以達到效果,那使用CASE語句也是同樣的效果
分組,使用MAX聚合函數
SELECT student_name,
max(CASE COURSE when 'Linux' THEN SCORE ELSE 0 END) as 'Linux',
max(CASE COURSE when 'MySQL' THEN SCORE ELSE 0 END) as 'MySQL',
max(CASE COURSE when 'Java' THEN SCORE ELSE 0 END) as 'Java'
FROM tb_lemon_grade
GROUP BY student_name;
結果如下圖所示:
使用SUM,結果如下圖所示
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
GROUP BY student_name;
總結:
通過上面一步一步的分解,我們就完成了一個行轉列的SQL語句編寫,現在問題又來了,這種方式雖然能達到效果,但是如果課程多了,比如還有英語、數學、物理等等課程,是不是寫起來就筆記麻煩了?有沒有動態的方式,不管有多少課程,通過SQL就能一步到位呢?大家可以去嘗試下,
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25