利用 SQL 實現(xiàn)數(shù)據(jù)分組與透視
數(shù)據(jù)分組是對相同類別的數(shù)據(jù)進行匯總,而數(shù)據(jù)透視表是通過對行或列的不同組合對數(shù)據(jù)進行匯總,所使用的匯總方法有求和、計數(shù)、平均值、標(biāo)準(zhǔn)差等,本文使用SQL對數(shù)據(jù)進行數(shù)據(jù)分組和數(shù)據(jù)透視,下面一起來學(xué)習(xí)。

普通分組
普通的數(shù)據(jù)分組這里使用的GROUP BY函數(shù),同時使用COUNT函數(shù)進行計數(shù)。
#數(shù)據(jù)分組SELECT Ssex,COUNT(SId) as '人數(shù)' from StudentGROUP BY Ssex;

分組篩選
如何對于分組后的結(jié)果進行篩選?這里不能使用WHERE函數(shù),應(yīng)該使用HAVING進行篩選,只要后面跟篩選條件即可。
#數(shù)據(jù)分組SELECT Ssex,COUNT(SId) as '人數(shù)' from StudentGROUP BY SsexHAVING COUNT(SId)>5;

CASE WHEN分組
#score字段分組SELECT *,CASEWHEN score>90 THEN '優(yōu)秀'WHEN score>=80 AND score<90 THEN '良好'WHEN score>=70 AND score<80 THEN '中等'WHEN score>=60 AND score<70 THEN '及格'ELSE '不及格'END AS '成績分組'FROM score;

單列分組
數(shù)據(jù)分組可以單列分組,也可以多列分組,對于單列分組,只需要在GROUP BY后面跟一個字段就可以。
#單列分類匯總SELECT ssex,COUNT(sid) AS id_count FROM studentGROUP BY ssexORDER BY id_count DESC;

多列分組
而對多列數(shù)據(jù)分組,可以在GROUP BY后面跟多個字段,下面這條SQL語句同時根據(jù)課程號和學(xué)號進行分組,然后以分?jǐn)?shù)和降序排列。
#多列分類匯總SELECT CId,SId,SUM(score) AS score_sum FROM scoreGROUP BY CId,SIdHAVING score_sum >160ORDER BY score_sum DESC;

數(shù)據(jù)透視
在SQL中想要達到數(shù)據(jù)透視表的功能,需要GROUP BY與CASE WHEN結(jié)合使用,下面這條SQL語句可以計算不同分?jǐn)?shù)段的人數(shù),現(xiàn)用CASE WHEN對不同的分?jǐn)?shù)段進行分類,然后,用GROUP BY分組,并且計數(shù),實現(xiàn)數(shù)據(jù)透視功能。
#score字段分組SELECTCASEWHEN score>90 THEN '優(yōu)秀'WHEN score>=80 AND score<90 THEN '良好'WHEN score>=70 AND score<80 THEN '中等'WHEN score>=60 AND score<70 THEN '及格'ELSE '不及格' END AS score_type,COUNT(sid) as '人數(shù)'FROM scoregroup by score_typeorder by COUNT(sid) DESC;






評論
圖片
表情
