从零开始学SQL数据分析,SQL数据分组与透视
数据分组是对相同类别的数据进行汇总,而数据透视表是通过对行或列的不同组合对数据进行汇总,所使用的汇总方法有求和、计数、平均值、标准差等,本文使用SQL对数据进行数据分组和数据透视,下面一起来学习。 普通分组
普通的数据分组这里使用的GROUP BY函数,同时使用COUNT函数进行计数。 #数据分组 SELECT Ssex,COUNT(SId) as "人数" from Student GROUP BY Ssex;
分组筛选
如何对于分组后的结果进行筛选?这里不能使用WHERE函数,应该使用HAVING进行筛选,只要后面跟筛选条件即可。 #数据分组 SELECT Ssex,COUNT(SId) as "人数" from Student GROUP BY Ssex HAVING COUNT(SId)>5;
CASE WHEN分组
CASE WHEN函数用来对数据进行判断和分组,下面的代码中我们对score列的值进行判断,score大于90为优秀,score大于80为良好,score大于70为中等, score大于60为及格,否则不及格,结果使用成绩分组字段进行标记。 #score字段分组 SELECT *, CASE WHEN score>90 THEN "优秀" 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;
单列分组
数据分组可以单列分组,也可以多列分组,对于单列分组,只需要在GROUP BY后面跟一个字段就可以。 #单列分类汇总 SELECT ssex,COUNT(sid) AS id_count FROM student GROUP BY ssex ORDER BY id_count DESC;
多列分组
而对多列数据分组,可以在GROUP BY后面跟多个字段,下面这条SQL语句同时根据课程号和学号进行分组,然后以分数和降序排列。 #多列分类汇总 SELECT CId,SId,SUM(score) AS score_sum FROM score GROUP BY CId,SId HAVING score_sum >160 ORDER BY score_sum DESC;
数据透视
在SQL中想要达到数据透视表的功能,需要GROUP BY与CASE WHEN结合使用,下面这条SQL语句可以计算不同分数段的人数,现用CASE WHEN对不同的分数段进行分类,然后,用GROUP BY分组,并且计数,实现数据透视功能。 #score字段分组 SELECT CASE WHEN score>90 THEN "优秀" 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 "人数" FROM score group by score_type order by COUNT(sid) DESC;