MySQL基础知识——分组GROUP BY

GROUP BY语句用于结合聚合函数,按一个或多个列对结果集进行分组。本文以customers和orders表为例,展示了如何查询不同城市的客户数量和订单数量,同时解释了GROUP BY的使用规则,包括多表连接查询和排除重复数据。此外,还提到了GROUP BY在数据分组时自动排除重复数据的功能。
摘要由CSDN通过智能技术生成

点击关注上方“SQL数据库开发”,

设为“置顶或星标”,第一时间送达干货

GROUP BY 作用
GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。

 GROUP BY 语法

SELECT column_name, 

aggregate_function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name;

示例数据表

我们以表customers和orders为例:

表customers

表orders

GROUP BY实例

查询居住在各个城市的客户分别有多少个。我们可以这样写SQL:

SELECT 城市,COUNT(*) AS 客户数量
FROM Customers
GROUP BY 城市

结果为:

从上面我们可以看到,GROUP BY 将城市名称相同的客户聚集在一起,然后通过COUNT函数计算出了他们的数量。

在具体使用GROUP BY子句前,需要知道一些重要的规定。

  • GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制。

  • GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。

  • 除聚集计算语句外, SELECT语句中的每个列都必须在GROUP BY子句中给出。

  • 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。

  • GROUP BY子句必须出现在WHERE子句之后, ORDER BY子句之前。

对照上面的实例,我们可以发现GROUP BY的用法满足上面的规定:

除了聚合函数COUNT,城市列出现在SELECT语句和GROUP BY子句中。

GROUP BY 多表连接

查询每个城市有多少个订单产生。我们可以这样写SQL:

SELECT c.城市,COUNT(o.订单ID) AS 订单数量
FROM Customers c
LEFT JOIN Orders o ON c.客户ID=o.客户ID
GROUP BY c.城市

结果为:

因为没有北京和杭州的用户购买产品,所以订单数量为0

GROUP BY排重

GROUP BY在进行分组的时候,会自动排除重复数据。

对城市和省份进行分组,但不进行任何聚合操作:

SELECT 城市 ,省份
FROM customers
GROUP BY 城市,省份

结果为:

该功能与SQL中的关键字DISTINCT功能相同,但在性能上会有区别,这里不作扩展介绍。

——End——
后台回复关键字:1024,获取一份精心整理的技术干货
后台回复关键字:进群,带你进入高手如云的交流群。
推荐阅读
阿里规定超过3张表,禁止JOIN,为何?

MySQL 常用命令手册

5个免费在线 SQL 数据库环境

我司空降了一名专家后,一半程序员疯了...

一款免费比Navicat还要好用,功能强大的数据库管理工具
这是一个能学到技术的公众号,欢迎关注

点击「阅读原文」了解SQL训练营

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SQL数据库开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值