1. #进阶六:分组查询(group by)
    2. /*
    3. 语法:
    4. select 查询列表
    5. from 表名
    6. where 筛选条件
    7. group by 分组列表
    8. having 分组后筛选
    9. order by 排序列表;
    10. 执行顺序:
    11. from子句
    12. where子句
    13. group by子句
    14. having子句
    15. select子句
    16. order by子句
    17. 特点:
    18. 1.查询列表往往是:分组函数和被分组的字段
    19. 2.分组查询中的筛选分为两类:
    20. 筛选的基表 使用的关键词
    21. 分组前筛选 原始表 where
    22. 分组后筛选 分组后的结果集 having
    23. */
    24. #一:简单的分组
    25. #案例一:查询每个工种的员工的平均工资
    26. SELECT AVG(salary),job_id
    27. FROM employees
    28. GROUP BY job_id;
    29. #二:可以实现分组前的筛选
    30. #案例一:查询邮箱中包含a字符的每个部门的最高工资
    31. SELECT MAX(salary),department_id
    32. FROM employees
    33. WHERE email LIKE '%a%'
    34. GROUP BY department_id;
    35. #三:可以实现分组后的筛选(having)
    36. #案例一:查询哪个部门的员工个数大于5
    37. SELECT department_id,COUNT(*)
    38. FROM employees
    39. GROUP BY department_id
    40. HAVING COUNT(*)>5;
    41. #四:可以实现升序
    42. #案例一:查询有奖金的员工的最高工资>6000的工种编号和最高工资,按最高工资升序
    43. SELECT job_id,MAX(salary)
    44. FROM employees
    45. WHERE commission_pct IS NULL
    46. GROUP BY jod_id
    47. HAVING MAX(salary)>6000
    48. ORDER BY MAX(salary) ASC;
    49. #五:按多个字段分组
    50. #案例一:查询每个工种每个部门的最低工资,并按最低工资降序
    51. #提示:工种和部门都一样才是一组
    52. SELECT job_id,department_id,MIN(salary)
    53. FROM employees
    54. GROUP BY department_id,job_id
    55. ORDER BY MIN(salary) DESC;