我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL之group by分组查询

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL之group by分组查询

MySQL之group by分组查询

有如下数据:

一个简单的分组查询的案例

按照部门编号deptno分组,统计每个部门的平均工资。

select deptno,avg(sal) avgs
from emp
group by deptno;

结果如下:

group by关键字语法详解

group by是用于分组查询的关键字,一般是配合sum(),avg(),count(),max(),min()聚合函数使用的。也就是说SQL语句中只要有group by,那么在select后面的展示字段中一般会有聚合函数(5个聚合函数)中的一个或多个函数出现。观察上图用表中的字段A进行分组后,一般就需要对表中的其它字段,使用聚合函数,这样意义更大,而不是还对字段A使用聚合函数。

当SQL语句中使用了group by后,在select后面一定有一个字段使用了聚合函数(5个聚合函数)。但是除了这个聚合函数,select后面还可以添加其他什么字段吗?

答案肯定是可以的!但是该字段有一定的限制,并不是什么字段都可以。也就是说,当SQL语句中使用了group by关键字后,select后面除了聚合函数,就只能是group by后面出现的字段。也就是图中的字段A,select后面只能存在group by后面的字段。

分组前筛选和分组后筛选

原始表和结果集的概念

  • 原始表指的是数据库中真正存在的那个表,使用【select * from 表名】查询出来的就是原始表信息。
  • 结果集指的是在SQL语句中,添加其它任何一个限制条件,最终展示给我们表,都是结果集。添加不同的限制条件,查询出来的结果集也是不同的。
  • 原始表只有一个,结果集却是各种各样的。

where筛选和having筛选选用

  • 只要是需求中,涉及到聚合函数做条件的情况,一定是分组后的筛选
  • 能用分组前筛选的,就优先考虑分组前的筛选。(考虑到性能问题)

分组前筛选

  • 查询姓名中包含S字符的,每个部门的工资之和。
select deptno,sum(sal)
from emp
where ename like "%S%"
group by deptno;

  • 查询工资大于2000的,不同部门的平均工资。
select deptno,avg(sal)
from emp
where sal > 2000
group by deptno;

分组后筛选

  • 查询部门员工个数大于3的部门编号和员工个数。
select deptno,count(*)
from emp
group by deptno
haveing count(*) > 3;

  • 查询每个部门最高工资大于3000的部门编号和最高工资。
select deptno,max(sal) maxs
from emp
group by deptno
having maxs count(*) > 3;

分组前筛选和分组后筛选合用

  • 查询1981年入职的,不同部门间工资的平均值大于2000的部门编号和平均值。
select deptno,avg(sal) avgs
from emp
where year(hiredate) = "1981"
group by deptno
having avgs > 2000;

分组查询(按函数分组)

  • 按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>3的有哪些?
select length(ename) len, count(*) counts
from emp
group by len
having counts > 3;

分组查询(按多个字段分组)

  • 查询每个部门每个工种的员工的平均工资。
select deptno,jop,avg(sal) avgs
from emp
group by deptno,job;

group by和order by

  • 查询每个部门的员工的平均工资,按照平均工资降序。
select deptno,jop,avg(sal) avgs
from emp
group by deptno
order by avgs desc;

  • 查询每个部门的员工的平均工资,按照平均工资升序。
select deptno,jop,avg(sal) avgs
from emp
group by deptno
order by avgs asc;

总结

  • 分组函数做条件,肯定是放在having子句中。
  • 能用分组前筛选的,就优先考虑使用分组前筛选。(where筛选)
  • group by子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),还支持函数分组(用的较少)。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL之group by分组查询

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL之group by分组查询

有如下数据:一个简单的分组查询的案例按照部门编号deptno分组,统计每个部门的平均工资。select deptno,avg(sal) avgsfrom empgroup by deptno;结果如下:group by关键字语法详解group by是用于分组查
MySQL之group by分组查询
2015-05-12

Mysql之分组查询,Group By,Group Having的用法

一、group by 的用法 group by ,在mysql中用来给字段分组,sql语句如下,这是一条用来统计男女数量的sql语句。 这里我们要注意到,group by ,一定是和聚合函数配合使用的,而不能直接使用select *,当然
2023-08-17

Sequelize中用group by进行分组聚合查询

一、SQL与Sequelize中的分组查询1.1 SQL中的分组查询SQL查询中,通GROUP BY语名实现分组查询。GROUP BY子句要和聚合函数配合使用才能完成分组查询,在SELECT查询的字段中,如果没有使用聚合函数就必须出现在OR
2022-06-04

MySQL分组查询获取每组最新的一条数据详解(group by)

目录业务场景:解决方案:group by id 方案验证:那怎么样才可以实现呢?使用 inner join 内连接,如下:总结业务场景:最近项目中迭代一个旧的功能,再原有的设计上进行功能拓展(因成本等原因,不考虑项目重构),其中设计到了这
MySQL分组查询获取每组最新的一条数据详解(group by)
2024-08-18

sql分组统计“group by”

准备数据先准备数据,数据如图所示:按app字段分组select fun(logs.id) as c, -- fun表示聚合函数 logs.appfrom public.logs as logsgroup by logs.app;计数 countselect
sql分组统计“group by”
2016-07-01

MySQL查询:Group By 后取出每一组中最大的数据

环境:MySQL5.7版本先生成一组测试数据public static int randAge(){ return new Random().nextInt(100);}public static char randScore(){ int i =

	MySQL查询:Group By 后取出每一组中最大的数据
2015-03-20

mysql高效查询left join和group by(加索引)

mysql高效查询 mysql牺牲了group by来增加left join的速度(前提是加了索引)。 user表:10万数据 实例1: 200秒左右SELECT U.id, A.favorite_count FROM (SELECT id
2022-05-15

MYSQL使用group by,如何查询出总记录数

比如有这样一条SQL,根据t.user_id,t.report_date两个字段统计这样前端页面能展示数据,但往往需要一个总记录数,在有分页的情况下用到一种解决方法是在外面套一层,然后对其count(*)SELECT COUNT(*) FROM (SELECT
MYSQL使用group by,如何查询出总记录数
2015-05-14

编程热搜

目录