分组查询
#分组函数
/*
函数,类似java中的方法
叫什么?方法名或者函数名
干什么?函数功能
分组函数,又称为统计函数或聚合函数
length('john')//传入一个值,返回一个值,一对一,像这种函数,就不是分组函数,叫做单行函数,分组函数表示这个函数给出一组值,最后返回一个值
max(salary)//分组函数,给它一组值,比如说给它一列值
分组函数的分类
max():最大值
min():最小值
sum():和
avg():平均值
count():计算非空的个数
这些是通用的,sqlserver、oracle、mysql 都是一样的
特点:
1、sum、avg只支持数值型,count、max、min支持任何类型
2、这几个分组函数,都忽略null值
3、count()分组函数,支持以下写法
count(*)建议使用
count(1)
表示查询结果集的行数
#分组查询
和分组函数一起搭配使用的查询,我们叫做分组查询,换句话说,分组查询一般都会用到分组函数
#案例1:查询有奖金的,每个部门的最高奖金率
SELECT MAX(commission_pct) 最高奖金率,department_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY department_id;
#案例2:查询员工姓名中包含字符a,每个部门的最低工资高于3000的部门编号
SELECT MIN(salary) 最低工资,department_id FROM employees
WHERE last_name LIKE '%a%'
GROUP BY department_id
HAVING 最低工资 > 3000
#案例3:查询电话以“110”开头的,工种号包含字符'T'的,每
#个工种的平均工资>5000的工种号和平均工资
SELECT avg(salary) FROM employees
WHERE phone_number like '515%' and job_id like '%T%'
GROUP BY job_id
HAVING avg(salary) > 5000
#案例4:查询每个地区的部门个数,求个数大于2的部门个数和地区号
SELECT COUNT(*) 个数,location_id FROM departments
GROUP BY location_id
HAVING 个数 > 2
#五、排序 order by 支持别名
#案例:查询员工姓名中包含字符a,每个部门的最低工资高于3000的部门编号
#,按照最低工资降序排序
SELECT min(salary) 最低工资,department_id from employees
WHERE last_name LIKE '%a%'
GROUP BY department_id
HAVING 最低工资 > 3000
ORDER BY 最低工资 DESC
/**
分组查询练习
**/
#3.查询各job_id的员工工资的最大值,最小值,平均值,总和,并按job_id升序
SELECT MAX(salary),MIN(salary),avg(salary),SUM(salary)
FROM employees
GROUP BY job_id
order by job_id
#4.查询员工最高工资和最低工资的差距使用别名DIFFERENCE)
SELECT MAX(salary) - min(salary) DIFFERENCE
from employees
#5.查询各个管理者手下员工的最低工资,
#其中最低工资不能低于6000,没有管理者的员工不计算在内
SELECT MIN(salary) 最低工资,manager_id from employees
WHERE manager_id is not null
GROUP BY manager_id
HAVING 最低工资 >= 6000
#6.查询所有部门的编号,员工数量和工资平均值,并按平均工资降序
SELECT department_id,count(*),avg(salary) 平均工资
from employees
GROUP BY department_id
order by 平均工资 desc
#7.选择各个job_id的员工人数
SELECT count(*),job_id FROM employees
GROUP BY job_id