group by 及分组函数

单表操作-group by 及分组函数

分组函数

  • max - >最大值
  • min - >最小值
  • count - >计数
  • avg - >求平均值
  • sum - >求和

假如现在有一个表employee(eno, ename, deptno, departname, salary, allowance),则下面的操作所求得的结果分别是

//找出所有员工的最高薪资
select max(salary) from employee;

//找出所有员工的最低薪资
select min(salary) from employee;

//找出所有员工一共有多少个
select count(*) from employee;

//找出所有员工的平均薪资
select avg(salary) from employee;

//找出所有员工的薪资总和
select sum(salary) from employee;

建议自己建表多试几次哦!


分组查询 ——group by

什么是分组查询?

​ 在实际应用中,有时候需要按照某些条件分组后再进行操作,此时我们在查询数据时就需要进行分组操作。

操作语句:
select ... from ... group by ...
//select 后只能加 group by 之后的字段和分组函数,这点很重要!!!

还是上面那个表employee(eno, ename, deptno, departname, salary, allowance)

select deptno,avg(salary) from department group by deptno;

为了使数据更加直观,下面代入具体数据帮助理解,表名为emp:

enoenamedeptnodeptnamesalaryallowance
01Smith10technoligy5000800
02Alan10technoligy6000500
03Black10technoligy5500700
04Brown20maker8000400
05Jackson20maker7000800
06Bob30software10000null
07Lily30software12000null
group by 的原理:

通过将某一个字段相等的数据的其他字段联合相加,你可能不懂是什么意思,好,那现在用上面的emp表来讲,字段存在相同时有deptno,如果group by deptno,那么你会得到一个只有三个数据的表deptno

deptno
10
20
30

而现在能够与它一起查看的数据有哪些?

如果需要查看相应的字段,需要使用到分组函数,比如最高薪资,最高津贴,最低薪资,最低津贴……能用分组函数求得的字段都可以一起查看

语句执行的顺序

不知道大家有没有试过在where后面加上分组函数?没试过的可以去试一下,然后你就会发现报错了,哦豁,怎么不能用?前面说的都是屁话?不能用的?no no no,出现报错是因为语句是有执行顺序的,下面这条语句:

select ... from ... where ... group by ... having ... order by ...

上述语句的执行顺序为:from->where->group by->having->select->order by

什么意思?

​ 先from定位表,然后找出满足where语句的所有数据,按照group by给定字段分组,分组后在用having后面的条件再筛出不满足条件的数据,之后再按照select想要查看的字段构建出一个需要查看的表,然后按照order by后面给出的田间进行排序。(看不懂的多看几遍,我讲的很清楚了!)

​ 好的,我就当你已经懂了上面所说的语句执行顺序,这下就可以解答上面说的问题了——为什么where语句后面接分组函数进行查询时会报错?因为再进行where条件筛选时还没有进行过分组,分组是在where条件执行完后再进行的,所以说分组函数只能再分组后使用.

​ 那么这个时候就会有人问,欸?上面介绍分组函数的时候根本没有分组,可是还是可以查出数据啊!好哇,又在乱教!不,事实上如果没有group by语句时,系统会默认地再条件筛选结束后将整个表分成一组,由于select语句地执行再分组函数之后,所以是可以查询分组函数的计算结果滴 !<叉手手>

当然分组操作也是可以按多个字段分组的,只需要再字段之间加逗号隔开即可。

都看到这里了,不点个赞再走嘛?拜托拜托~

最大标题,我故意的,欸嘿,分享一张学校的图书馆
无

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值