十、分组查询

1、语法:

  select  分组函数,字段   5

  from  表名                       1

  where 筛选条件         2

  group by  分组的列表     3

  having ......                      4

  order by .....                   6

其中,group by是按照某些字段进行分组;having是对分组之后的数据进行再次的过滤。

分组函数都是在group by 语句执行结束以后才会执行的,分组函数不可以直接应用在where语句中,因为group by 是在where语句执行之后才进行的。

规则:当一条语句中有group by 的话,select后面只能跟分组函数参与的分组字段。

2、案例:

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

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

  案例二(加入筛选条件):查询邮箱包含字符a,每个部门的平均工资

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

  案例三:查询有奖金的每个领导下员工的最高工资

  SELECT manager_id,MAX(salary)

  FROM employees
  WHERE commission_pct IS NOT NULL
  GROUP BY manager_id;

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

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

  案例五:查询每个工种有奖金的员工的最高工资大于12000的工种编号和最高工资  

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

  案例六:查询领导编号大于102的每个领导手下的最低工资大于5000的领导编号是哪个以及其最低工资

  SELECT manager_id,MIN(salary)

  FROM employees
  WHERE manager_id > 102
  GROUP BY manager_id
  HAVING MIN(salary) > 5000;

 

posted @ 2019-11-11 20:30  笔心  阅读(130)  评论(0)    收藏  举报