MySQL入门(三)分组函数

老杜带你学的课堂笔记

分组函数(多行处理函数)的特点:

输入多行,最终输出一行。

count 计数

sum 求和 

avg 平均值

max 最大值

min 最小值

注意:分组函数在使用时必须先进行分组,然后才能用

如果没有对数据进行分组,整张表默认为一组

分组函数的注意事项:

1. 分组函数自动忽略 null,不需要提前对null进行处理

2. count(具体字段):表示统计该字段下所有不为 null 的元素的总数

count(*):统计表中的总行数,只要有一行数据 count 则++

3. 分组函数不能直接使用在 where 子句中

4. 所有的分组函数可以组合起来一起用

5. 在一句 select 语句当中,如果有 group by 语句的话,select 后面只能跟:参加分组的字段,以及分组函数,其他的一律不能跟。

分组查询(五颗星)

什么是分组查询?

实际应用中,可能有这样的需求,需要先进行分组,然后对每一组的数据进行操作。

这个时候我们需要使用分组查询

select。。。from。。。group by。。。

顺序

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

顺序不可以颠倒,需要记忆

执行顺序:

1. from  从某张表中查询数据

2. where    先经过 where 条件筛选出有价值的数据

3. group by    对这些有价值的数据进行分组 

4. having    分组之后可以使用 having 继续筛选

5. select   select 查询出来

6. order by   最后排序输出

为什么分组函数不能直接用在where后面:

比如说:

select  sal  from ... where  sal>min(sal); // 报错

因为分组函数在使用的时候必须先分组之后才能使用

where 执行的时候,还没有分组,所以where后面不能出现分组函数。

分组函数实例

找出每个工作岗位的工资和

实现思路:按照工作岗位分组,然后对工资求和

select    sum(sal)    from    ...    group by    job;

找出每个部门的最高薪资

实现思路:按照部门编号分组,求每一组的最大值

select    deptno, max(sal)    from ... group by    deptno;

找出每个部门,不同工作岗位的最高薪资

实现思路:两个字段联合成一个字段去看

select deptno , job , max(sal)

from ?

group by

deptno , job;

找出每个部门最高薪资,要求显示最高薪资大于3000的

实现思路:按照部门编号求每一组的最大值,要求显示最高薪资大于3000

select   deptno , max(sal)    from    ...    group by    deptno    having    max(sal)>3000;

使用 having 可以对分完组之后的数据进一步过滤,having 不能单独使用,having 不能完全代替 where,having 必须和 group by 联合使用。

思考:以上的语句执行效率或许比较低,实际上可以这么考虑,先将大于3000的都找出来,

select   deptno , max(sal)    from   ?    where   sal>3000    group by    deptno;

优化策略:where 和 having  ,优先选择 where,where 实在完成不了了,再选择 having

要求显示平均薪资高于2500的

select   deptno , avg(sal)    from    ...    group by   dentno    having    avg(sal)>2500;

找出每个岗位的平均薪资,要求显示平均薪资大于1500的,除了 manager 岗位之外,要求按照平均薪资降序排

select

job , avg(sal)  as  avgsal

from

...

where

job<>'manager'

group by

job

having

avg(sal)>1500

order by

avgsal  desc;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容