SQL - 数据分组之Group By关键字

2023-03-27 14:08:13

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时应该按照表中的顺序进行编写。

子句 说明 是否必须使用
SELECT 要返回的列或表达式
FROM 从中检索数据的表 仅在从表选择数据时使用
WHERE 行级过滤
GROUP BY 分组说明 仅在按组计算聚集时使用
HAVING 组级过滤
ORDER BY 输出排序顺序
LIMIT 要检索的行数
  • 作者:亿码平川
  • 原文链接:https://blog.csdn.net/weixin_42372660/article/details/120376153
    更新时间:2023-03-27 14:08:13