6.组函数(avg(),sum(),max(),min(),count())、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化
1組函數(shù) avg(),sum(),max(),min(),count()案例:
selectavg(sal),sum(sal),max(sal),min(sal),count(sal)
from emp
/
截圖:
2 組函數(shù)和null在一起
案例:求員工的平均獎(jiǎng)金
錯(cuò)誤sql:
select avg(comm) 方式1,sum(comm)/count(comm)方式2,sum(comm)/count(*) 方式3
from emp;
截圖:
錯(cuò)誤原因:
select count(comm),count(*) from emp;
分析:
--組函數(shù)自動(dòng)濾空,組函數(shù)忽略空值
--修正函數(shù)的濾空
select count(nvl(comm,0)),count(*) fromemp;
3.分組數(shù)據(jù)
A? 求各個(gè)部門的平均工資
思路:需要把各個(gè)部門的數(shù)據(jù)劃分….10部門 20部門 30部門….分組……
select deptno,avg(sal)
from emp
group by deptno;
運(yùn)行結(jié)果:
B? 組函數(shù)設(shè)計(jì)的本意
(1)、select檢索的列 必須要位于group by后面的集合列中
(2)、組函數(shù)設(shè)計(jì)的本意:必須要在分組數(shù)據(jù)之上,進(jìn)行結(jié)果集的檢索….
注意:group by子句要求:所有在select中出現(xiàn)的列,都必須在出現(xiàn)group by分組子句中。
select a, b, c
from emp
group by a, b, c,d; 這種格式是對(duì)的,因?yàn)樵?/span>select后的a、b、c都在groub by后面。
?
select a, b, f
??from emp
??group by a, b, c,d;? 這種格式是錯(cuò)的,因?yàn)樵?/span>select后的f不在group中
4 在GROUP BY子句中包含多個(gè)列
--按部門? 不同的職位 統(tǒng)計(jì)平均工資
--先按照部門分組,在按照job分組,如果deptno和job一樣,就是同一組,然后求平均工資。
?
--求各個(gè)部門的,每一個(gè)工種的平均工資
select deptno,job,avg(sal),count(deptno)
from emp
group by deptno,job
order by 1;
截圖:
5 分組過(guò)濾
--查詢各個(gè)部門的平均工資
--進(jìn)一步,查詢平均工資大于2000的部門
select deptno,avg(sal)
from emp
group by deptno
having avg(sal) > 2000;
6 having和where子句區(qū)別
求10號(hào)部門的平均工資
方法1:先分組,在過(guò)濾
select deptno,avg(sal)
from emp
group by deptno
having deptno=10;
方法2:先過(guò)濾再分組
select deptno,avg(sal)
from emp
where deptno = 10
group by deptno;
7 關(guān)于sql優(yōu)化
select * from emp;
select deptno, ename, ...,? from emp?把要顯示的所有的列都寫出來(lái),速度快,,不需要"翻譯"
?
select *form emp
where (deptno = 10) and (deptno = 20) and (deptno=30)
?
<---------
oracle解析邏輯表達(dá)式 的方向....從右向左
?
總結(jié)
以上是生活随笔為你收集整理的6.组函数(avg(),sum(),max(),min(),count())、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 5.单行函数,多行函数,字符函数,数字函
- 下一篇: 笛卡尔集基本原理,等值连接,不等值连接,