• 数据库MySQL--分组查询


    事例使用文件:https://files.cnblogs.com/files/Vera-y/myemployees.zip

    分组数据:group by 子句

    分组查询语法:

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

      from 表

      (where 筛选条件)  # where 必须连接from关键字

      group by 分组的列表

      (having 分组列表的条件)    #  分组后还有进行限制的条件

      (order by 子句)

    1.简单的分组查询

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

    select max(salary), job_id   # job_id:需要分组的列

    from employees

    group by job_id;

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

    select count(*),location_id

    from departments

    group by location_id;

    2.添加筛选条件的分组查询

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

    SELECT AVG(salary),department_id
    FROM employees
    WHERE email LIKE '%a%'
    GROUP BY department_id;

    例2.查询有奖金的每个领导手下员工的最高工资

    SELECT MAX(salary), manager_id
    FROM employees
    WHERE commission_pct IS NOT NULL
    GROUP BY manager_id;

    3.添加复杂的筛选条件

    例1.查询那个部门的员工个数>2

    SELECT COUNT(*), department_id
    FROM employees
    GROUP BY department_id
    HAVING COUNT(*)>2;

    例2.查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资

    SELECT MAX(salary), job_id
    FROM employees
    WHERE commission_pct IS NOT NULL
    GROUP BY job_id
    HAVING MAX(salary)>12000;

    例3.查询领导编号>102的每个领导手下的最低工资>5000的领导编号是那个,以及其最低工资

    SELECT MIN(salary), manager_id
    FROM employees
    WHERE manager_id>102   # 分组前的筛选
    GROUP BY manager_id
    HAVING MIN(salary)>5000;   # 分组后的筛选

    注:分组筛选时,能用分组前筛选,就优先考虑使用,但当分组函数作为条件时,其肯定是放在having子句中

    4.按表达式或函数分组

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

    SELECT COUNT(*),LENGTH(last_name) as leng
    FROM employees
    GROUP BY LENGTH(last_name)
    HAVING COUNT(*)>5;

    (注:在MySQL中having和group by 后面是支持别名的,但是orcal等的数据库语言是不支持别名的)

    5.按多个字段分组

    例1.查询每个部门每个工种的员工 的平均工资

    SELECT AVG(salary),department_id,job_id
    FROM employees
    GROUP BY department_id,job_id;      # 这里位置可以颠倒

    6.添加排序

    例1.查询每个部门每个工种的员工 的平均工资,按平均工资的高低显示

    SELECT AVG(salary),department_id,job_id
    FROM employees
    GROUP BY department_id,job_id
    ORDER BY AVG(salary) DESC;

    (注:排序是在group by后面)

  • 相关阅读:
    jquery 备忘笔记
    spring 集成 mybatis 后数据源初始化失败问题分析
    SpringMVC 资源国际化实现以及常见问题
    IE浏览器 get请求缓存问题
    Comparison method violates its general contract! 异常原因
    Security基础(六):部署Zabbix监控平台、配置及使用Zabbix监控系统、自定义Zabbix监控项目、实现Zabbix报警功能
    LVS负载均衡中arp_ignore和arp_annonuce参数配置
    iptables防火墙相关命令详解
    <三剑客> 老大:awk命令用法
    <三剑客> 老三:grep命令用法
  • 原文地址:https://www.cnblogs.com/Vera-y/p/10922995.html
Copyright © 2020-2023  润新知