zoukankan      html  css  js  c++  java
  • MySQL数据库:第七章:分组查询

    回退至Mysql数据库理论与实战
    #进阶6:分组查询

    语法:
    select 查询列表 ④
    from 表名——————————①
    where 分组前条件—— ②
    group by 分组的字段③
    having 分组后条件 ⑤
    order by 排序列表 ⑥
    特点:
    1、查询列表往往是:分组函数和分组后的字段
    换句话说,和分组函数一同查询的字段,一般就是分组后的字段
    2、分组查询的筛选有两种:分组前筛选和分组后筛选
    连接关键字 位置 筛选的结果集
    分组前筛选 where group by前面 原始表
    分组后筛选 having group by后面 分组后的查询结果(虚拟表)
    结论:分组函数做条件 肯定是 分组后筛选条件!!!
    3、分组查询可以通过单个字段,也可以通过多个字段,中间用逗号隔开

    #1)简单的分组
    #案例1:查询每个工种的员工平均工资
    SELECT AVG(salary) 平均工资,job_id
    FROM employees
    GROUP BY job_id;
    #2)可以实现分组前的筛选
    #案例1:查询邮箱中包含a字符的 每个部门的最高工资
    SELECT MAX(salary) ,department_id
    FROM employees
    WHERE  email LIKE '%a%'
    GROUP BY department_id;
    #案例2:查询有奖金的每个领导手下员工的平均工资
    SELECT AVG(salary) 平均工资,manager_id
    FROM employees
    WHERE commission_pct IS NOT NULL
    GROUP BY manager_id;
    #3)可以实现分组后的筛选
    #案例1:查询哪个部门的员工个数>5
    #①查询每个部门的员工个数
    SELECT COUNT(*) 员工个数,department_id
    FROM employees
    GROUP BY department_id
    #②查询①结果集中,有哪个部门的员工个数>5
    SELECT COUNT(*) 员工个数,department_id
    FROM employees
    GROUP BY department_id
    HAVING COUNT(*)>5
    #案例2:每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
    SELECT job_id,MAX(salary) 最高工资
    FROM employees
    WHERE commission_pct IS NOT NULL
    GROUP BY job_id
    HAVING 最高工资>12000;
    #案例3:领导编号>102的每个领导手下的最低工资大于5000的领导编号和最低工资
    SELECT manager_id,MIN(salary) 最低工资
    FROM employees
    WHERE manager_id > 102
    GROUP BY manager_id
    HAVING 最低工资>5000;
    #4)可以实现排序
    #案例:每个工种有奖金的员工的最高工资>6000的工种编号和最高工资,按最高工资升序
    SELECT job_id,MAX(salary) 最高工资
    FROM employees
    WHERE commission_pct IS NOT NULL
    GROUP BY job_id
    HAVING 最高工资>6000
    ORDER BY 最高工资 ASC;
    #5)按多个字段分组
    #案例:查询每个工种每个部门的最低工资,并按最低工资降序
    SELECT MIN(salary) 最低工资,job_id,department_id
    FROM employees
    GROUP BY job_id,department_id
    ORDER BY 最低工资 DESC;
    #1. 查询各 job_id 的员工工资的最大值,最小值,平均值,总和,并按 job_id 升序
    SELECT MAX(salary) 最大值,MIN(salary) 最小值,AVG(salary) 平均值,SUM(salary) 和
    FROM employees
    GROUP BY job_id
    ORDER BY job_id;
    #2. 查询员工最高工资和最低工资的差距(DIFFERENCE)
    SELECT MAX(salary)-MIN(salary) DIFFERENCE
    FROM employees;
    #3. 查询各个管理者手下员工的最低工资,其中最低工资不能低于 6000,没有管理者的员
    #工不计算在内
    SELECT MIN(salary) 最低工资,manager_id
    FROM employees
    GROUP BY manager_id
    HAVING 最低工资>=6000 AND manager_id IS NOT NULL;
    #4. 查询所有部门的编号,员工数量和工资平均值,并按平均工资降序
    SELECT department_id,COUNT(*) 个数,AVG(salary) 平均工资
    FROM employees
    GROUP BY department_id
    ORDER BY 平均工资 DESC;
    #5. 选择具有各个 job_id 的员工人数
    SELECT COUNT(*) 人数,job_id
    FROM employees
    GROUP BY job_id;
    
  • 相关阅读:
    POJ 1953 World Cup Noise
    POJ 1995 Raising Modulo Numbers (快速幂取余)
    poj 1256 Anagram
    POJ 1218 THE DRUNK JAILER
    POJ 1316 Self Numbers
    POJ 1663 Number Steps
    POJ 1664 放苹果
    如何查看DIV被设置什么CSS样式
    独行DIV自适应宽度布局CSS实例与扩大应用范围
    python 从入门到精通教程一:[1]Hello,world!
  • 原文地址:https://www.cnblogs.com/javawxid/p/12812122.html
Copyright © 2011-2022 走看看