聚合函数、分组函数
SUM、AVG、MIN、MAX、COUNT
可以单独使用 select max(sale) from aa
不允许与其他列共同书写在在非分组查询的select from 之间
selectmax(sale),name,id,sale from aa oracle 直接报错,mysql其他列信息无意义
分组查询
select sex from aa group by sex; --oracle 中分组查询, select from 之间只允许出现 分组函数和分组依据列
having 一般只使用分组函数作为查询条件
select avg(sale),deptno from aa
group by deptno HAVING avg(sale) >750 order by deptno ; -- oracle 中having可以书写在 group 前面
练习题:
1.查询部门平均工资在8000元以上的部门名称及平均工资。
SELECT department_id,job_id, AVG(IFNULL(salary,0)) salaryAvg
FROM employees2
GROUP BY department_id
HAVING salaryAvg>8000;
2.查询工作编号中不是以“SA_”开头并且平均工资在8000元以上的工作编号及平均工资,并按平均工资降序排序。
SELECT job_id,AVG(IFNULL(salary,0)) avgSalary
FROM employees2
WHERE job_id NOT LIKE 'SA\_%'
GROUP BY department_id
HAVING avgSalary >8000
ORDER BY avgSalary DESC
3.查询部门人数在4人以上的部门的部门名称及最低工资和最高工资。
SELECTdepartment_id,MAX(salary),MIN(salary)
FROM employees2
GROUP BY department_id
HAVING COUNT(department_id)>4
4.查询工作不为SA_REP,工资的和大于等于25000的工作编号和每种工作工资的和。
SELECT department_id ,job_id,SUM(IFNULL(salary,0))sum
FROM employees2
WHERE job_id<>'SA_REP'
GROUP BY department_id
HAVING sum>25000
5.显示经理号码,这个经理所管理员工的最低工资,不包括经理号为空的,不包括最低工资小于3000的,按最低工资由高到低排序
SELECT manager_id,MIN(salary)
FROM employees2
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING MIN(IFNULL(salary,0))>=3000
ORDER BY MIN(salary) DESC