烟台专业网站建设,网站开发 常德,电子商务网站设计岗位主要是?,福永网站建设#进阶5#xff1a;分组查询
/* 语法#xff1a;
select 分组函数#xff0c;列#xff08;要求出现在group by的后面#xff09; from 表 【where 筛选条件】 group by 分组的列表 【order by 排序的字段】;
注意#xff1a;查询列表必须特殊#xff0c;要求是分组函… #进阶5分组查询
/* 语法
select 分组函数列要求出现在group by的后面 from 表 【where 筛选条件】 group by 分组的列表 【order by 排序的字段】;
注意查询列表必须特殊要求是分组函数和group by后出现的字段
特点 1、和分组函数一同查询的字段必须是group by后出现的字段 2、筛选分为两类分组前筛选和分组后筛选 针对的表 位置 连接的关键字 分组前筛选 原始表 group by where在group by前 分组后筛选 group by后的结果集 group by后 having在group by后
注意分组函数做条件肯定是放在having子句中能用分组前筛选的优先考虑用分组前筛选
问题1分组函数做筛选能不能放在where后面 答不能
问题2where——group by——having
一般来讲能用分组前筛选的尽量使用分组前筛选提高效率
3、分组可以按单个字段也可以按多个字段多个字段之间用逗号分隔且不分顺序 4、可以搭配着排序使用
*/
#引入查询每个部门的员工个数 SELECT COUNT(*) FROM employees WHERE department_id90;
#1.简单的分组
#案例1查询每个工种的员工平均工资 SELECT AVG(salary),job_id FROM employees GROUP BY job_id; #案例2查询每个位置的部门个数 SELECT COUNT(*),location_id FROM departments GROUP BY location_id; #案例3查询每个工种的员工最大工资 SELECT MAX(salary),job_id FROM employees GROUP BY job_id; #2、可以实现分组前的筛选
#案例1查询邮箱中包含a字符的 每个部门的最高工资 SELECT MAX(salary),department_id FROM employees WHERE email LIKE %a% GROUP BY department_id; #案例2查询有奖金的每个领导手下员工的平均工资 SELECT AVG(salary),manager_id FROM employees WHERE commission_pct IS NOT NULL GROUP BY manager_id; #3、分组后筛选
#添加简单筛选条件
#案例查询哪个部门的员工个数5
#1查询每个部门的员工个数 SELECT COUNT(*),department_id FROM employees GROUP BY department_id
#2根据1的结果进行筛选查询哪个部门的员工个数2 SELECT COUNT(*),department_id FROM employees GROUP BY department_id HAVING COUNT(*)2;#having用于分组后的筛选where用于分组前对原始表的筛选 #添加复杂筛选条件条件过于复杂时可以拆分开进行
#注意在原表中有的用where筛选如有奖金在原表中没有的用having筛选如最高工资12000
#案例2每个工种有奖金的员工的最高工资12000的工种编号和最高工资 SELECT MAX(salary),job_id FROM employees WHERE commission_pct IS NOT NULL GROUP BY job_id HAVING MAX(salary)12000; #案例3领导编号102的每个领导手下的最低工资大于5000的领导编号和最低工资 SELECT MIN(salary),manager_id FROM employees WHERE manager_id102 GROUP BY manager_id HAVING MIN(salary)5000; #4.添加排序
#案例每个工种有奖金的员工的最高工资6000的工种编号和最高工资,按最高工资升序
SELECT job_id,MAX(salary) m FROM employees WHERE commission_pct IS NOT NULL GROUP BY job_id HAVING m6000 ORDER BY m ; #5.按多个字段分组
#案例查询每个工种每个部门的最低工资,并按最低工资降序
SELECT MIN(salary),job_id,department_id FROM employees GROUP BY department_id,job_id ORDER BY MIN(salary) DESC; #6.按表达式或函数分组
#案例:按员工姓名的长度分组查询每一组的员工个数筛选员工个数5的有哪些 SELECT COUNT(*),LENGTH(last_name) FROM employees GROUP BY LENGTH(last_name) HAVING COUNT(*)5;
#可以使用别名 SELECT COUNT(*) c,LENGTH(last_name) la_name FROM employees GROUP BY la_name HAVING c5; #------分组查询总结------# 一、语法 SELECT 分组函数分组后的字段 FROM 表 【WHERE 筛选条件】 GROUP BY 分组的字段 【HAVING 分组后的筛选】 【ORDER BY 排序列表】 二、特点 使用关键字 筛选的表 位置 分组前筛选 WHERE 原始表 GROUP BY的前面 分组后筛选 HAVING 分组后的结果 GROUP BY 的后面