MySQL 分组查询

1.分组函数

    1.1 分组函数的功能

               功能: 用作统计使用,又称为聚合函数或统计函数或组函数

    1.2 分组函数的分类

               分类: sum 求和, avg 平均值,max 最大值,min 最小值,count 计算个数 

    1.3 分组函数的特点

               1. sum , avg 一般用于处理数值型

                  max,min,count 可以处理任何数据类型

               2. 分组函数: sum, avg, max , min , count 等都可以忽略null值

               3. 分组函数可以和distinct 搭配实现去重的运算

               4. count里面可以加字段 ,一般count(*)查询行数

               5. 和分组函数一同查询的字段要求和group by 后的字段,其他都不行

2.  分组查询

    2.1 分组查询的语法:

                 SELECT 分组函数,列(要求出现在group by的后面)

                 FROM 表

                 WHERE 筛选条件

                 GROUP BY 分组的列表

                 ORDER BY 分组

          注: 查询列表必须特殊,要求是分组函数和 GROUP BY 后出现的字段

    2.2 分组函数的特点

             1. 分组查询中的筛选条件分为两类

                                                 数据源                       位置                                       关键字

                        分组前筛选       原始表                    GROUP BY 子句的前面           WHERE

                        分组后筛选       分组后的结果集     GROUP BY 子句的后面            HAVING

                    ①分组函数做条件肯定是放在HAVING 子句中

                    ②能用分组前筛选的,就优先考虑使用分组前筛选

             2. GROUP BY 子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求)

             3. 也可以添加排序(排序放在整个分组查询的最后)   

    2.3  分组的案例     

           简单的分组查询

           案例1 :查询每个工种的最高工资

           select max(salary),job_id

           from employees

           group by job_id

           案例2 : 查询每个位置上的部门个数

           select count(*),location_id

           from departments

           group by location_id

          添加筛选条件

          案例: 查询邮箱中包含a字符的,每个部门的平均工资

          select avg(salary),department_id

          from employees

          where email like "%a%"

          group by department_id; 

          添加复杂的筛选条件

          案例 查询那个部门的员工个数大于2

          ①: 查询每个部门的员工个数

          select count(*),department_id

          from employees

          group by department_id;

         ②: 根据第一步的结果进行筛选,查询哪个部门个员工个数大于2

         select count(*),department_id

         from employees

         groupby department_id

         having count(*)>2;

           按表达式或函数分组

           案例: 按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些

                     select count(*),length(last_name) len_name

                     from employees

                     group by length(last_name)

                     having count(*)>5;

            按多个字段分组

            案例:查询每个部门每个工种的平均工资

            select avg(salary),department_id,job_id

            from employees 

            group by department_id,job_id;

            添加排序

            案例: 查询每个部门每个工种的员工的平均工资,并且按平均工资的高低显示

            select avg(salary),department_id,job_id

            form employees

            group by department_id,job_id

            order by avg(salary) desc;

  

酒枯推荐

      推荐使用浏览器:Google Chrome

      推荐使用Java环境:IDEA(IntelliJ IDEA)

          本周推荐学习:JDBC的学习与应用

          推荐学习视频链接:https://www.bilibili.com/video/BV1eJ411c7rf?from=search&seid=2172690829084319707

          推荐练习Java环境:https://leetcode-cn.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值