SQL - 数据分组之Group By关键字
1、创建分组
分组就是把具有相同的数据值的行放在同一组中。可以对同一分组数据使用汇总函数进行处理,例如求分组数据的平均值等。指定的分组字段除了能按该字段进行分组,也会自动按该字段进行排序。
SELECT COUNT(id) 男生与女生的人数 FROM demo GROUP BY gender
分析:这条sql语句的功能是统计男生和女生的人数。
GROUP BY子句一些重要的规定:
-
GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套(使用逗号分开),为数据分组提供更细致的控制。 GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。 如果列中有多行NULL值,它们将分为一组。 除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出。
2、过滤分组
除了能用GROUP BY分组数据外,MySQL还允许过滤分组,其功能与WHERE子句相似。它们唯一的差别是WHERE过滤行,而HAVING过滤分组。同时HAVING支持所有WHERE操作符,换句话说,也就是WHERE能用的地方,HAVING都可以使用。
SELECT count(id) 班级的人数 FROM demo GROUP BY class HAVING COUNT(*) > 50
分析:这条sql的功能是对class列进行分组,同时分组大小不对于50的分组,将被过滤。
HAVING和WHERE的差别: WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。这是一个重要的区别,WHERE排除的行不包括在分组中。这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组。
3、SELECT子句顺序
最后,我们回顾一下SELECT语句中子句的顺序。下表列出了各个子句,而且编写sql时应该按照表中的顺序进行编写。