分组查询06

Posted zhengyinboke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分组查询06相关的知识,希望对你有一定的参考价值。

  1 #分组查询
  2 /*
  3 语法:
  4      select 分组函数,列 (要求出现在group by 的后面)
  5      from 表
  6      【where 筛选条件】
  7      group by 分组的列表
  8      【order by 字句】
  9      
 10 特点:
 11     1.分组查询中的筛选分为两类
 12              数据源            位置            关键字
 13     分组前筛选   原始表               group by字句前面    where
 14     分组后筛选   分组后的结果集        group by字句后面    having
 15     2.分组函数做条件肯定放在having字句中
 16     3.能用分组前筛选优先选用分组前筛选
 17     4.group by支持单个字段分组,也支持多个字段分组(多个字段用逗号隔开没有顺序要求)
 18     5.也可以增加排序(拍寻放在整个分组查询的最后)
 19 */
 20 
 21 #案例1:查询每个工种的平均工资
 22 SELECT MAX(salary),job_id 
 23 FROM employees
 24 GROUP BY job_id;
 25 
 26 #案例2:查询每个位置上的部门个数
 27 SELECT COUNT(*),location_id
 28 FROM departments
 29 GROUP BY location_id;
 30 
 31 #一.添加筛选条件
 32 #案例1:查询邮件中包含a字符,每个部门的平均工资
 33 
 34 SELECT AVG(salary),department_id
 35 FROM employees
 36 WHERE email LIKE %a%
 37 GROUP BY department_id;
 38 
 39 #案例2:查询有奖金的每个领导手下员工最高工资
 40 
 41 SELECT MAX(salary),manager_id 
 42 FROM employees
 43 WHERE commisson_pct IS NOT NULL 
 44 GROUP BY manager_id;
 45 
 46 #案例3:那个部门的员工个数大于2
 47 #1)查询每个部门的员工个数
 48 SELECT COUNT(*),department_id
 49 FROM employees
 50 GROUP BY department_id;
 51 #2)根据1的结果进行筛选,查询哪个部门的员工个数>2
 52 SELECT COUNT(*),department_id
 53 FROM employees
 54 GROUP BY department_id
 55 HAVING COUNT(*)>2;
 56 
 57 #案例4:查询每个工种有奖金的员工的最高工资>12000的公众编号和最高工资
 58 
 59 #1).查询每个工种有奖金的员工的最高工资
 60 SELECT MAX(salary),jobs_id
 61 FROM employees
 62 WHERE commisson_pct IS NOT NULL
 63 GROUP BY job_id;
 64 
 65 #2).根据1)的结果继续筛选,最高工资>12000
 66 SELECT MAX(salary),jobs_id
 67 FROM employees
 68 WHERE commisson_pct IS NOT NULL
 69 GROUP BY job_id
 70 HAVING MAX(salary)>12000;
 71 
 72 #案例4:查询领导编号>102的每个领导手下的最低工资>5000的领导编号是哪个,以及其最低工资
 73 
 74 #1)查询每位领导手下员工固定最低工资
 75 SELECT MIN(salary),manager_id
 76 FROM employees 
 77 GROUP BY manager_id;
 78 #2).添加筛选条件 编号大于102
 79 SELECT MIN(salary),manager_id
 80 FROM employees
 81 WHERE manager_id > 102 
 82 GROUP BY manager_id;
 83 #3).最低工资大于5000
 84 SELECT MIN(salary),manager_id
 85 FROM employees
 86 WHERE manager_id > 102 
 87 GROUP BY manager_id;
 88 HAVING MIN(salary)>5000;
 89 
 90 #二.按表达式或函数分组
 91 
 92 #案例:按员工姓名长度分组,查询每一组员工个数,筛选员工个数大于5的有哪些
 93 
 94 #1).每个长度的员工个数
 95 
 96 SELECT COUNT(*),LENGTH(last_name)  len_name 
 97 FROM employees
 98 GROUP BY LENGTH(last_name);
 99 
100 #2).添加筛选条件    
101 #注意group by having 都支持别名
102 SELECT COUNT(*) c ,LENGTH(last_name)  len_name 
103 FROM employees
104 GROUP BY len_name 
105 HAVING c>5;
106 
107 #三.按多个字段进行分组
108 
109 #案例:查询每个部门每个工种的员工平均工资
110 
111 SELECT AVG(salary),department_id,job_id
112 FROM employees
113 GROUP BY job_id,department_id;
114 
115 
116 #四.添加排序
117 #案例:查询每个部门每个工种的员工的平均工资,并且按平均工资的高低显示
118 SELECT AVG(salary),department_id,job_id 
119 FROM employees
120 WHERE department_id IS NOT NULL
121 GROUP BY job_id,department_id
122 HAVING AVG(salary)>10000
123 ORDER BY AVG(salary) DESC;

DQL

以上是关于分组查询06的主要内容,如果未能解决你的问题,请参考以下文章

MySQL基础-06DQL语言(数据查询语言)-进阶5分组查询

2020/06/19 mysql 表分组查询 表约束

按月分组的Mysql查询

SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段

18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询

使用 Laravel 查询数据并按天分组