mysql 分组_MySQL数据分组教程

本文是MySQL教程系列的第四篇,重点讲解数据分组操作。介绍了GROUP BY用于创建分组,HAVING用于过滤分组,以及分组与排序的区别。通过示例展示了如何在SELECT语句中使用GROUP BY和HAVING,帮助初学者理解并掌握分组查询技巧。
摘要由CSDN通过智能技术生成

本篇文章是MySQL的第四篇教程,对于MySQL来说,对于后端开发人员来说是必不可少的东西,我是深受MySQL的折磨和打击,不管是面试的工程中,还是在日常的开发工作当中都是如此。所以写这一系列的文章就是和一些新手小伙伴们共同进步共同学习,把我在日常所遇到的一些坑,在这里展示给大家,希望大家能有所收获,感兴趣的小伙伴们也希望能点赞关注一下。

本篇文章主要将主要介绍分组数据,以及便于能汇总表的内容,分别是group by和having字句,主要内容就是这两个,以及我会介绍给大家从如何创建分组,过滤分组和分组的排序,这几个具体的操作给大家来演示一下。

创建分组分组是在SELECT语句的GROUP BY子句里面建立的,理解分组的最好办法就是看下面一个例子。

f6d52cf7436a45d47941f9759ac0670f.png

上面的SELECT语句中指定了两个列,vend_id和num_prods用count进行连接,GROUP BY指的是MySQL按照vend_id排序分组的数据,因为使用了GROUP BY就没有必要指定要计算和估值的没个组了,系统会自动完成.在使用GROUP BY的时候需要注意下面几个问题。

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

如果在GROUP BY子句里面嵌套分组,数据将在最后规定的分组上面进行汇总,欢聚话说就是,在建立分组的时候指定的所有列都会在一起进行计算。

GROUP BY子句中列出的每个列都必须是检索列或者有效的表达式,但不能是聚集函数,如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式,不能使用别名。

如果分组列中具有NULL值,则null值将作为一个分组返回,还有就是GROUP BY子句必须出现在WHERE子句之后,ORDER BY之前。

2.过滤分组

除了使用GROUP BY分组数据外,MySQL还允许过滤分组,也就是筛序数据,根据条件,规定哪些分组,排除哪些分组,比如对于一个订单表来说,最少让你列出两个顾客的订单出来,为了得到这种数据,那就是必须基于完整的分组而不是个别的进行过滤。

在MySQL里面提供了另外一个子句,那即是HAVING子句,他非常类似于WHERE,实际上目前我们使用的大多数select语句都是在过滤数据过滤行,而不是过滤分组。HAVING他也是支持所有的where操作符的。看下面的例子。

4a8f5316f09107ba0e2dad2ec9779467.png

在这条语句当中,第一行是使用了聚集函数的最基本的SELECT,他与之前的例子很像,然后使用GROUP BY进行对数据的分组,但是后面哟紧跟着一个HAVING子句,这个就是对分组进行的过滤。只显示出num_prods大于等于2的值。

3.分组和排序

虽然GROUP BY和ORDER BY经常完成相同的工作,但是他们之间是非常不同的

32357809eba8c246ff15677d742bcff4.png

可以看得出来,两者之间的饿第一条差距是你很大的,我们经常发现用GROUP BY分 组的数据确实是以分组顺序输出的。但情况并不总是这样,它并不是SQL 规范所要求的。此外,用户也可能会要求以不同于分组的顺序排序。仅 因为你以某种方式分组数据(获得特定的分组聚集值),并不表示你需要 以相同的方式排序输出。应该提供明确的ORDER BY子句,即使其效果等 同于GROUP BY子句也是如此。

还有一个需要注意的就是,一般在使用GROUP BY子句时,应该也给 出ORDER BY子句。这是保证数据正确排序的唯一方法。千万 不要仅依赖GROUP BY排序数据。为了跟好的理解两者之间的区别看下面的例子。

ae54a9c681240eaf3e3ab597256dea32.png

在这个例子中,GROUP BY子句用来按订单号(order_num列) 分组数据,以便SUM(*)函数能够返回总计订单价格。HAVING子 句过滤数据,使得只返回总计订单价格大于等于50的订单。最后,用ORDER BY子句排序输出。

今天的数据的分组大概就是这么多,到此结束,还是那句话,后面会持续输出关于MySQL的相关知识,希望大家多多支持,点赞关注一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值