數(shù)據(jù)分組是對(duì)相同類別的數(shù)據(jù)進(jìn)行匯總sql 查前 條平均值,而數(shù)據(jù)透視表是通過(guò)對(duì)行或列的不同組合對(duì)數(shù)據(jù)進(jìn)行匯總,所使用的匯總方法有求和、計(jì)數(shù)、平均值、標(biāo)準(zhǔn)差等,本文使用SQL對(duì)數(shù)據(jù)進(jìn)行數(shù)據(jù)分組和數(shù)據(jù)透視,下面一起來(lái)學(xué)習(xí)。
普通分組
普通的數(shù)據(jù)分組這里使用的GROUP BY函數(shù),同時(shí)使用COUNT函數(shù)進(jìn)行計(jì)數(shù)。
#數(shù)據(jù)分組
SELECT Ssex,COUNT(SId) as '人數(shù)' from Student
GROUP?BY?Ssex;
分組篩選
如何對(duì)于分組后的結(jié)果進(jìn)行篩選?這里不能使用WHERE函數(shù),應(yīng)該使用進(jìn)行篩選,只要后面跟篩選條件即可。
#數(shù)據(jù)分組

SELECT Ssex,COUNT(SId) as '人數(shù)' from Student
GROUP BY Ssex
HAVING COUNT(SId)>5;
CASE WHEN分組
CASE WHEN函數(shù)用來(lái)對(duì)數(shù)據(jù)進(jìn)行判斷和分組,下面的代碼中我們對(duì)score列的值進(jìn)行判斷,score大于90為優(yōu)秀,score大于80為良好,score大于70為中等, score大于60為及格,否則不及格,結(jié)果使用成績(jī)分組字段進(jìn)行標(biāo)記。
#score字段分組
SELECT *,
CASE

WHEN 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 '成績(jī)分組'
FROM score;
單列分組
數(shù)據(jù)分組可以單列分組,也可以多列分組,對(duì)于單列分組,只需要在GROUP BY后面跟一個(gè)字段就可以。
#單列分類匯總
SELECT ssex,COUNT(sid) AS id_count FROM student
GROUP BY ssex
ORDER BY id_count DESC;
多列分組
而對(duì)多列數(shù)據(jù)分組,可以在GROUP BY后面跟多個(gè)字段,下面這條SQL語(yǔ)句同時(shí)根據(jù)課程號(hào)和學(xué)號(hào)進(jìn)行分組sql 查前 條平均值,然后以分?jǐn)?shù)和降序排列。
#多列分類匯總

SELECT CId,SId,SUM(score) AS score_sum FROM score
GROUP BY CId,SId
HAVING score_sum >160
ORDER BY score_sum DESC;
數(shù)據(jù)透視
在SQL中想要達(dá)到數(shù)據(jù)透視表的功能,需要GROUP BY與CASE WHEN結(jié)合使用,下面這條SQL語(yǔ)句可以計(jì)算不同分?jǐn)?shù)段的人數(shù),現(xiàn)用CASE WHEN對(duì)不同的分?jǐn)?shù)段進(jìn)行分類,然后,用GROUP BY分組,并且計(jì)數(shù),實(shí)現(xiàn)數(shù)據(jù)透視功能。
#score字段分組
SELECT

CASE
WHEN 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 score
group by score_type
order by COUNT(sid) DESC;