GROUP BY
语句从英文的字面意义上理解就是根据(by)一定的规则进行分组(Group)数据处理或统计。
所以group by语句通常与聚合函数一起使用。
聚合函数是什么意思?我们来看聚合函数英文单词aggregate function,function是函数,毋庸置疑。aggregate可翻译为总数、总计、合计,所以两个组合起来可以翻译为汇总函数。是谁翻译为聚合的?站出来!
所以知道它是汇总统计的意思就好了,常用聚合函数包括计数count()、求和sum()、平均数avg()、最大值max()、最小值min()。
为了方便大家练习,我们直接使用之前介绍过的SQL在线模拟器,没看过的可以看这里
SQL在线模拟器
用到的数据表是user这张表
我们先看个例子,要统计所有的学生数,SQL语句如下
SELECT count(*) FROM user
这个时候只使用到了聚合函数count。
那如果你要按性别gender分组统计学生数,这个时候就要用到group by了,SQL语句如下
SELECT
gender
,count(*) FROM user
group by
gender
看到没有,
到了
敲黑板的时候了
按什么分组,就直接在group by后面加上对应的分组字段,同时,SELECT后面、聚合函数前面也要加上对应的分组字段,这样才能正常显示。
如果你有多个需要分组的字段,直接使用
逗号
隔开即可,例如
SELECT
gender,students
,count(*) FROM user
group by
gender,students
在这个例子中,这样做没啥意义,因为数据、字段都太少,没其他字段好举的,知道意思就行了。
有时候,需要分组的字段在原数据表里面没有现成的,需要我们先经过处理后得到新字段再进行分组,例如要对分数段进行分组统计人数
SELECT
(case when score>=90 then "优秀" else "合格" end) as 评价
,count(*) FROM user
group by
(case when score>=90 then "优秀" else "合格" end)
这时group by不能写别名“评价”,必须直接把处理的SQL语句直接写到group by后面,因为SQL的执行顺序如下:
1.FROM → 2. WHERE →3. GROUP BY →4. SELECT
看到没有GROUP BY先于SELECT执行,别名“评价”还没执行生效呢,所以需要把处理的SQL语句直接写到group by后面。
前面说了都是与聚合函数一起使用的,当然也可以只GROUP BY,不加聚合函数。只GROUP BY相当于就是对只GROUP BY的字段进行去重处理,得到不重复的唯一数据,SQL语句如下:
SELECT
gender
FROM user
group by
gender
SELECT
students,gender
FROM user
group by
students,gender
-------------------------------------
还在为数据分析该如何学而烦恼的朋友,赶紧学起来,跟着数据分析入门与进阶线路图学,一步一步进阶数据分析大师。
量身打造,少走弯路,
6~8折