一、聚合函數
聚合函數。稱為統計函數
常用的聚合函數
count()總量數
max()最大值
min()最小值
sum()和
avg()平均值
例:查詢部門30的總人數(查詢總人數,根據empno編號確定有多少編號,就有多個人)
select count(empno)from emp where deptno=30; count()括號是統計總數量,必須要傳的
⚠️聚合函數在統計時會忽略null值。
select sum(sal)where emp where deptno=10;
select avg(sal) where emp where deptno=10;
例:查詢部門30的最高工資、最低工資、平均工資
select max(sal),min(sal),avg(sal)from emp where deptno = 30;
二、分組統計
語法:
select 列名1 別名1,列名2 別名2...
from 表名1 別名1 inner join 表名2 別名2 on 多表間的關聯關系
where 條件(分組之前的條件)
group by 分組列
having (分組之后的條件)
order by 排序1 asc|desc,排列2 asc|desc....;
舉例:
查詢每個部門的平均工資
select deptno,avg(sal)
from emp
group by deptno;
select dname ,avg(sal)
from emp e,dept d
where e.empno = d.depno
group by d.dname
⚠️:在mysql中分組統計時可以查出分組列的其他列,而在orcal中不行
建議將要查詢出的列使用分組列
查詢出部門的名稱以及每個部門的員工數量
select d.dname,count(e.empno)
from dept d left join emp e on d.deptno = e.deptno
group by d.dname
查詢平均工資大於2000的部門的編號或者平均工資
select deptno , avg(sal)from emp group by deptno having avg(sal)>2000;
查詢出非銷售人員的職位名稱,以及從事同一工作的雇員的月工資綜合,並且滿足工資綜合大於5000,查詢結構按照月工資綜合生序排序
解題思路:
1、先寫出整體的關鍵字出來
2、思考需要查詢幾張表,把可能查詢的表下載from 后。 只查詢emp表
3、考慮有沒有分組之前的條件, 非銷售人員的職位。 job!=‘salesman’
4、思考需要按照什么分組。 按照job分組
5、思考分組后的條件。 滿足工資綜合大於5000. sum(sal)>5000
6、升序排序
select job ,sum(sal) sum
from emp
where job!='salesman'
group by job
having sum(sal)>5000
order by sum