Oracle分組查詢


關鍵字:  group by (分組) 和 having (過濾)

--統計每個部門的人數
-- group by 用於分組查詢,后面跟分組參照字段
--分組查詢以后,多行函數功能是統計每組的數據
select * from emp;
select count(*) from emp group by deptno;
select deptno, count(*) from emp group by deptno;

--統計每個部門人數,總工資,最高工資,最低工資,平均工資
select deptno,count(*),sum(sal),max(sal),min(sal),avg(*) from emp group by deptno order by deptno desc;
--注意:其中order by deptno desc 是按照部門的降序排列。

--統計每個部門的人數和平均工資,排除部門編號是10的
select deptno,count(*),avg(sal) 
from emp 
where deptno <>10 
group by deptno ;
--where子句不能寫到group by 后面 order by 可以寫到后面

--統計每個部門的人數,平均工資,排除工資小於2000的部門
select deptno,count(*),avg(sal)
from emp
where avg(sal) >= 2000
group by deptno
order by deptno desc;
--這種寫法是錯誤的,分組過濾需要使用having從句!!!
---改進措施:
--對分組查詢的結果進行過濾,要使用having從句,而不是where  having寫到group by 后面 與where不一樣
select deptno,count(*),avg(sal) from emp
group by deptno having avg(sal) >= 2000 order by deptno;


---知識小結:
----select -- from -- where -- group by -- having -- select -- order by 的遵從語法格式順序;
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

----統計每個部門人數,平均工資,排除部門編號為10的和平均工資小於2000的部門
select deptno,count(*),avg(sal) from emp
where deptno != 10 group by deptno having avg(sal) <>2000 order by deptno desc;
--desc 降序;asc是升序。

--emp表列出工資最小值小於2000的職位  (首先分組,按照職位分組)
select job,min(sal) from emp group by job having min(sal) < 2000;

--列出平均工資大於1200的部門和工作搭配的組合  deptno job 
select deptno,job,avg(sal) from emp group by deptno,job having avg(sal) > 1200;

--統計人數小於4的部門的平均工資  (按照部門分組)
select deptno,count(*),avg(sal) from emp 
group by deptno having count(*) < 4;

--統計各部門最高工資,排除最高工資小於3000的部門  (按照部門排序)
select deptno,max(sal) 
from emp
group by deptno
having max(sal) >= 3000
order by deptno;

-----至此,我們的DQL語句中單表查詢結束,后面的牽涉到多表查詢。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM