Mysql快速复习(四)--分组数据

本文介绍了MySQL中分组查询的基础知识,包括如何创建分组、过滤特定分组及结合排序的方法。通过实际案例,读者可以了解到GROUP BY与HAVING子句的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.分组数据

MySQL如果要返回特定检索的数据怎么办?或者只返回特定供应商所提供的产品怎么办?那就分组吧!

1.创建分组




在具体使用GUOUP BY子句前,需要知道一些重要的规定。
(1)GROUP BY子句可以包含任意数目的列,这使得能对分组进行嵌套,为数据分组提供更细致的控制。
(2)如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换句话说,在建立分组时,指定所有的列都一起计算。
(3)GROUP BY子句中列出的每个列都是必须检索列或有效的表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
(4)除聚集计算语句之外,SELECT语句中每个列都必须在GROUP BY子句中给出。
(5) 如果多个分组列中具有NULL值,则NULL值将作为最后一个分组返回。如果列中有多行NULL值,它们将被分为一组。
(6) GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。

2.过滤分组

除了用GROUP BY分组数据外,MySQL还允许过滤分组,规定包括那些分组,排除哪些分组。
WHERE语句不能完成该任务,因为WHERE过滤的是指定的行而不是分组。事实上,WHERE没有分组的概念。
MySQL为此专门提供了另外的子句 ,那就是HAVING子句。事实上,目前学过的所有类型的WHERE子句都可以用HAVING来代替。唯一差别是,WHERE过滤行,而HAVING过滤分组。下面这条子句最后一行增加了HAVING子句,它过滤COUNT(*)>=2的那些分组。



WHERE子句和HAVING子句可以混用, WHERE负责过滤行,HAVING负责过滤分组,如:



3.分组和排序

虽然GROUP BY 和 ORDER BY经常完成相同的工作,但是它们是非常不同的。
不要忘记ORDER BY!一般在使用GROUP BY子句时,也应该给出ORDER BY子句,这是保证数据正确排序的唯一方法。千万不要仅依赖GROUP BY排序数据。



重点:




4.SELECT 子句的顺序
SELECT语句中使用时有必须遵循的顺序,如下:




顺序由上到下即可。最后一个是LIMIT,倒是第二个是ORDER BY。可见除了LIMIT之外,ORDER BY是要往最后写的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值