mysql分组查询

Bertha 。 2023-03-03 08:46 101阅读 0赞

语法

  1. select 分组函数,分组后的字段 5
  2. from 1
  3. where 筛选条件】 2
  4. group by 分组的字段 3
  5. having 分组后的筛选】 4
  6. order by 排序列表】 6

执行顺序:按照上述语法中标注的

举例:
eg:查询每个工种的最高工资

  1. SELECT MAX(salary) max_salary,job_id
  2. FROM employees
  3. GROUP BY job_id;

eg:查询每个位置上的部门个数

  1. SELECT COUNT(*),location_id
  2. FROM departments
  3. GROUP BY location_id;

加上筛选条件【分组前筛选】
eg:查询邮箱中包含a字符,每个部门的平均工资

  1. SELECT AVG(salary),department_id
  2. FROM employees
  3. WHERE email LIKE ('%a%')
  4. GROUP BY department_id;

eg:查询有奖金的每个领导手下员工的最高工资

  1. SELECT MAX(salary),manager_id
  2. FROM employees
  3. WHERE commission_pct IS NOT NULL
  4. GROUP BY manager_id;

添加复杂条件 【分组后筛选】
eg:查询哪个部门的员工个数>2

  1. select count(*),department_id
  2. from employees
  3. group by department_id
  4. having count(*)>2;

eg:查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资

  1. SELECT MAX(salary) max_salary,job_id
  2. FROM employees
  3. WHERE commission_pct IS NOT NULL
  4. GROUP BY job_id
  5. HAVING max_salary>12000;

eg:查询领导编号>102的每个领导手下的最低工资>500的领导编号是哪个,以及其最低工资

  1. SELECT MIN(salary) min_salary,manager_id
  2. FROM employees
  3. WHERE manager_id>102
  4. GROUP BY manager_id
  5. HAVING min_salary>5000;

特点

1、分组查询中的筛选条件分两类
























使用关键字 筛选的表 位置
分组前筛选 where 原始表 group by前面
分组后筛选 having 分组后的结果 group by后面

①分组函数做条件肯定是放在having子句中
②能用分组前筛选的,就优先考虑使用分组前
2、group by子句中支持单个字段分组,多个字段分组(多个字段之间用逗号隔开,无顺序要求)
3、也可以添加排序(排序放在整个分组查询的最后)

按函数分组

eg:按员工的姓名长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些

  1. SELECT COUNT(*) people,LENGTH(last_name) len_name
  2. FROM employees
  3. GROUP BY len_name
  4. HAVING people;

分组查询练习
eg1:查询各个job_id的员工工资的最大值、最小值、平均值、总和并按job_id排序

  1. SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary),job_id
  2. FROM employees
  3. GROUP BY job_id
  4. ORDER BY job_id ASC;

eg2:查询员工最高工资和最低工资的差距(DIFFRENCE)

  1. SELECT MAX(salary)-MIN(salary) DIFFRENCE
  2. FROM employees;

eg3:查询各个管理者手下的员工的最低工资,其中最低工资不能低于6000,没有管理者和的员工不计算在内

  1. select min(salary),manager_id
  2. from employees
  3. where manager_id is not null
  4. group by manager_id
  5. having min(salary)>=6000;

eg4:查询所有部门的编号,员工数量和工资平均值,并按平均工资降序

  1. SELECT department_id,COUNT(*),AVG(salary)
  2. FROM employees
  3. GROUP BY department_id
  4. ORDER BY AVG(salary) DESC;

eg5:查询具有各个job_id的员工人数

  1. select count(*) 个数,job_id
  2. from employees
  3. group by job_id;

发表评论

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

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

相关阅读

    相关 MySQL 分组查询

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