SQL中的分組函數(shù)與分組查詢
語法
select [distinct] * | 列名1,列名2..., 列名n , 組函數(shù)(...)
from 表名1,表名2...
[where 條件][group by 列名1,列名2... ]
[having 條件][order by 排序列名1 ASC | DESC , 排序列名2 ASC | DESC...]
分組函數(shù)
- count(): 統(tǒng)計的是非null的個數(shù)
- sum() :記錄的總和
- avg():平均值
- max():最大值
- min():最小值
1. 查詢出所有員工的個數(shù)
select count(empno)
from emp
select count(comm)
from emp
2. 查詢出所有員工的總薪資
select sum(salary)
from emp
3. 查詢出所有員工的平均薪資
select avg(salary)
from emp
4. 查詢出所有員工的最大薪資
select max(salary)
from emp
5. 查詢出所有員工的最小薪資
select min(salary)
from emp
6. 統(tǒng)計各職位的員工個數(shù)
select job 職位, count(empno) 人數(shù)
from emp
group by job -- 按照job 分組
7. 統(tǒng)計各部門的員工個數(shù),根據(jù)部門編號升序排序
select deptno ,count(empno)
from emp
group by deptno
order by deptno
8. 統(tǒng)計各部門各職位的員工人數(shù),根據(jù)部門編號升序排序,部門編號相同,則按照職位的字母先后順序排序
部門編號 職位 人數(shù)
10 clerk 9
10 manager 3
10 others 2
20 clerk 5
20 manager 6
20 others 1
select deptno 部門編號, job 職位,count(empno) 人數(shù)
from emp
group by deptno,job
order by deptno,job
9. 統(tǒng)計10部門的各職位的員工人數(shù)(顯示部門編號,職位名稱,員工人數(shù))
部門編號 職位 人數(shù)
10 員工 9
10 經(jīng)理 3
10 主管 2
select deptno 部門編號, job 職位,count(empno) 人數(shù)
from emp
where deptno=10
group by job
10. 查詢10部門的各職位的員工人數(shù)大于2的職位信息(顯示部門編號,職位名稱,員工人數(shù))
部門編號 職位 人數(shù)
10 員工 9
10 經(jīng)理 3
[10 主管 2 ---過濾出去]
select deptno 部門編號, job 職位,count(empno) 人數(shù)
from emp
where deptno=10
group by job
having count(empno) >2
group by 分組使用注意事項:
- (1)select 單列, 組函數(shù) from ... 【錯誤】,一定要與group by 使用
where 與 having 的區(qū)別:
- (1)where 是分組之前的要過濾的條件,where后面不能與組函數(shù)一起使用 【where 與分組無關(guān)】
- (2)having 是分組之后的結(jié)果之上再做的過濾,having可以與組函數(shù)一起使用【having 與分組一起使用】