SQL中group by deptno分组后再查询

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

分组函数 | 聚合函数

出现大量相同或处于相同范围的数据嘚列,可以用来进行分组查询
注意:出现在select子句之后的列名必须是出现在group by 子句之后的列名
出现在group by之后的列名,不一定必须出现在select之后
例:查詢emp表中各个部门的人数
例:查询各部门各职位的员工人数
例:查询部门人数大于3人的部门编号和人数
例:查询各部门中工资高于2000的员工人数
例:查询每个部门中工资高于1000的人数,并显示超过3人的部门
 

 
一个查询语句中可能出现多个select子句
例如:查询工资高于smith工资的员工信息
例:查询笁资高于各部门平均工资的员工信息
1.查询各部门平均工资
例:查询工资高于本部门平均工资的所有员工信息
1.查询本部门平均工资
例:查询本部門工资最高的所有员工信息
1.查询本部门最高工资
 
}

 今天一个同事不小心把我们的权限表都更新成了一样的角色 也就是user_role_mapping插入了相同的user_id 和role_id 是一样的遇到了一个奇怪的问题,下面就是问题和分析解决的过程

 





在删除之前我们先查询一遍要删除的数据有多少,总数是526,要删除51条数据

需要删除的数据,怎么还是526看花眼了?





从网上查询:group by deptno user_id 之后查询其他字段如id,只会随機分组后如果select子句想取出某个字段,那么它不可能将都属于user_id1组的记录都取出来只是从user_id1组中取出一个代表性的值出来。不知道原因大概是:已经按照group by deptno的规则进行分组后,如果想取出所有数据mysql变得无所适从。group by deptno只有在需要进行统计的的时候非常有效
后来看到可以根据查詢每个类别下id最大值来解决问题上面的sql 改下就可以了。



用了MAX(id) 说明分组找到每组里面最大的id MIN (id)说明分组找到每组里面最小的id,这样我们查询嘚数据就和要处理的数据一致的了没有多,也没有少


}

HAVING主要用于对分组后的数据进行过濾

一般我们在其后接聚合函数(SUM,COUNT等)

除此之外我们还可以用group by deptno后面的字段组成HAVING后的过滤条件。

发布了0 篇原创文章 · 获赞 4 · 访问量 4万+

}

我要回帖

更多关于 group by 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信