MySql(八)分组查询

雨点打透心脏的1/2处 2022-01-15 04:21 377阅读 0赞

分组查询

  1. 简单分组查询

    /案例1:查询每个部门的平均工资/
    SELECT MAX(salary), job_id
    FROM employees
    GROUP BY job_id;
    /案例2:查询每个位置上的部门数/
    SELECT count(*), location_id
    FROM departments
    GROUP BY location_id;

2.具有筛选条件的分组查询

  1. /**案例1:查询邮箱中包含a字符的,每个部门的平均工资**/
  2. SELECT AVG(salary),department_id
  3. FROM employees
  4. WHERE email LIKE ‘%a%’
  5. GROUP BY department_id;
  6. /**案例2:查询有奖金的每个领导手下员工高工资**/
  7. SELECT MAX(salary), manage_id
  8. FROM employees
  9. WHERE commission_pct IS NOT NULL
  10. GROUP BY manage_id;

3.复杂条件的分组查询

  1. /**案例1:查询哪个部门的员工个数大于2
  2. 查询每个部门的员工个数 - 对上面的结果进行筛选出满足条件的部门**/
  3. SELECT COUNT(*),department_id
  4. FROM employees
  5. GROUP BY department_id
  6. HAVING COUNT(*) > 2;
  7. /**案例2:查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
  8. 查询每个工种的最高工资 - 筛选出最高过工资>12000**/
  9. SELECT MAX(salary),job_id
  10. FROM employees
  11. WHERE commission_pct IS NOT NULL
  12. GROUP BY job_id
  13. HAVING MAX(salary) > 12000;
  14. /**案例3:查询领导编号>102的每个领导手下员工的最低工资>1500的领导编号,以及其最低工资
  15. 查询每个领导手下的员工的最低工资编号大于102—>最低工资大于15000**/
  16. SELECT MIN(salary),manager_id
  17. FROM employees
  18. WHERE manager_id > 102
  19. GROUP BY manager_id
  20. HAVING MIN(salary) > 15000;

分组查询的特点:
























  数据源 位置 关键字
分组前筛选 原始表 Group by 前面 Where
分组后筛选 分组后的结果集 Group by 后面 having

注意:分组函数作为筛选条件是一定放having子句后面

4.按照表达式或函数分组查询

  1. /**案例1:按员工姓名的长度分组,查询每一组员工个数筛选出个数大于5的有哪些 **/
  2. SELECT COUNT(*) 个数,LENGTH(last_name) 姓名长度
  3. FROM emPloyees
  4. GROUP BY 姓名长度
  5. HAVING 个数 >5;
  6. /**按照多个字段进行分查询
  7. 案例1:查询每个部门每个工种的员工的平均工资(注意:这里的department_id和job_id的顺序是无先后的)**/
  8. SELECT AVG(salary),department_id,job_id
  9. FROM employees
  10. GROUP BY department_id,job_id;
  11. /**案例2:查询每个部门每个工种的员工的平均工资;按照平均工资的高低显示**/
  12. SELECT AVG(salary),department_id,job_id
  13. FROM employees
  14. GROUP BY department_id,job_id;
  15. ORDER BY AVG(salary) DESC
  16. /**案例3:查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内**/
  17. SELECT MIN(salary),manager_id
  18. FROM employees
  19. WHERE manager_id IS NOT NULL
  20. GROUP BY manager_id
  21. HAVING MIN(salary) >= 6000;
  22. /**案例4:查询所有部门的编号,员工数量和工资平均值,并按照平均工资降序排序**/
  23. SELECT department_id,COUNT(*),AVG(salary)
  24. FROM employees
  25. ORDER BY AVG(salary) DESC;
  26. /**案例5:查询具有各个job_id的员工人数**/
  27. SELECT COUNT(*),job_id
  28. FROM employees
  29. GROUP BY job_id;

本文原地址:https://blog.csdn.net/qq_43952245/article/details/90478559

发表评论

表情:
评论列表 (有 0 条评论,377人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL 分组查询

    MySQL SELECT 语句,允许使用 GROUP BY 子句,将结果集中的数据行根据选择列的值进行逻辑分组,以便能汇总表内容的子集,实现对每个组而不是对整个结果集进行整合。