当前位置: 首页 > article >正文

sql中group by和having的使用

group by:按照某个字段或者某些字段进行分组。
having:对分组之后的数据进行再次过滤,having必须和group by一起用,且在group by后面。
比如person表如下(以下查询均基于此表):
在这里插入图片描述
1.group by 用法:对某个或某些字段进行分组
对sex字段进行分组时:

select sex from test.person group by sex;

在这里插入图片描述
也可对多个字段进行分组,比如对sex和age同时分组。此时我们的数据如下:
在这里插入图片描述

select sex, age from test.person group by sex, age;

在这里插入图片描述

从上面结果来看,某种意义上,是和distinct功能类似。
所以,在更多时候,group by是和分组函数(count、sum、avg、max、min) 联合使用的,需要注意的是,任何一个分组函数都是在group by执行结束后才会执行的。
eg,要查询男、女分组下的最大年龄,与max函数联合使用:

select sex,max(age) from test.person group by sex;

在这里插入图片描述
又或者,要查询男、女的人数,与count函数联合使用:

select sex, count(sex)  from test.person group by sex;

在这里插入图片描述
2.接下来就要说having的使用了having是对分组数据的筛选。
eg,要查询人数大于1的分组,使用having筛选时,要写到group by后面

select sex from test.person group by sex having count(sex) > 1 ;

在这里插入图片描述
3.having和where的区别
先给一个简单的语句:

select sex from test.person where age < 21 group by sex;

执行结果如下:
在这里插入图片描述
由此可见,where语句是在分组之前执行的。总结where和having的区别就是:

wherehaving
1.分组之前执行 2.后面不能再跟max,min,count等聚合函数(因为where的执行顺序大于聚合函数) 3.过滤的是原表的数据,过滤掉的数据,不参与分组1.分组之后执行 2.后面不能再跟max,min,count等聚合函数 3.过滤的是分组后的数据 4.支持所有WHERE操作符

http://www.kler.cn/a/153056.html

相关文章:

  • Git——工作区管理
  • OpenCV快速入门:彩蛋——小游戏制作
  • 大数据:Hadoop刷题
  • 创建SpringBoot Helloword 程序详细步骤
  • 【C++ Primer Plus学习记录】嵌套循环和二维数组
  • 营销系统规则引擎
  • uni-app+ts----微信小程序锚点定位 、自动吸顶、滚动自动选择对应的锚点(点击tab跳转对应的元素位置)
  • 基于Spring、SpringMVC、MyBatis的外卖点餐网站
  • 【数据结构】初识排序 直接插入排序
  • Google Analytics(谷歌分析)是什么以及如何使用
  • 电商营销场景的RocketMQ实战01-RocketMQ原理
  • C语言贪吃蛇(有详细注释)
  • 四个方法,设置excel文件只读模式
  • C++相关闲碎记录(3)
  • 模糊C均值(Fuzzy C-means,FCM)聚类的可运行的python程序代码,复制即可用!!切记需要安装库 scikit-fuzzy
  • MFC、VC++操作excel后,excel程序进程无法正常退出的非暴力处理方法
  • 【Java SE】泛型
  • 高德Map
  • 基于web的舞蹈选课管理系统设计与实现
  • 反转链表的Java实现