Oracle操作總結

來源:互聯網
上載者:User

彙總函式:
count sum max min avg
count返回的結果集中行的數目
sum max min avg顧名思義。但是要注意彙總函式強調的是"結果集中……",強調了
現在進行的操作對象是結果集
注意NULL不參與彙總函式的預算,要想其參加運算那麼要將其轉換為非空的值

分組:
在一個查詢中需要進行多次統計就需要就必須使用分組

where是分組前過濾,過濾的是未經處理資料。這樣就過濾掉了不必要的資料提高了效率

having是分組後過濾,過濾的是統計結果

先要弄明白:分組,分組 什麼才叫一組——前提條件當然是相同的才叫一組

比如:班級同學分兩組,按照性別來分。只有都是男性才會在同一組

老師的筆記說得很清楚:分組函數運算每一組記錄,每一組返回一個結果
比如:select deptno,job,avg(sal) from emp group by deptno,job 把deptno,job相同的(其餘欄位不用多考慮,就以這兩個為關鍵)算作一組
所以最後Oracle返回的是九行資料,即九個結果

注意按照某些欄位分組後,已經是"組"的概念了,個體的特性已經消失了。
按照什麼分組,那麼當然可以從結果集中得到這些欄位!!!比如按照城市分組,就可以得到每一組的城市名。
除了分組欄位以外的欄位,其餘的欄位只可以參與彙總運算(count sum max min avg)——當然,前提是可以使用具體的彙總
函數,比如不可以avg(name),因為那麼根本就不是數字!!!!!!!!!!

再次強調:比如(在這裡我們假設沒有按照comm分組)員工編號是"9527"的comm(提成),但是可以得到平均的comm.
因為現在是以"組"的概念存在的。已經不存在個體了。

核心思想:分組以後個體的概念消失了,是"組"的概念。
比如這裡有學生的 姓名,年紀,性別,身高
按照身高分組——相同的身高在一個組。那麼當然可以select 身高,其餘的只可以用彙總函式了
按照性別分組——相同的性別放在一個組。那麼當然可以select 性別,其餘的只可以用彙總函式了

還有一個很值得注意:要是涉及到彙總,分組的時候order by的欄位也只能是分組裡的欄位!!!!!!!!!!!!!!

只要涉及到彙總函式就要想到分組!!!!!!!!!!!
要是前面出現了彙總函式,且後面沒有涉及到group by 那麼這是最特殊的分組。在select裡任意一個具體欄位都不可以使用。
只可以使用彙總函式

這裡有一堆這兩天敲的實驗資料:

select * from emp
select job,count(*) from emp group by job having count(*)>3
select job "工種" from emp where job='CLERK'--正確的
select job "工種",count(job) "此工種人數" from emp group by job--正確的
select count(*) "此工種人數" from emp where job='CLERK'--正確的
select job "工種",count(*) "此工種人數" from emp where job='CLERK'--錯誤的
select job "工種",sum(comm) from emp group by job--正確的
select job "工種",avg(comm) from emp group by job--正確的
select job "工種",max(comm) from emp group by job--正確的
select job "工種",min(comm) from emp group by job--正確的
select job "工種",sal "工資",sum(comm) from emp group by job--錯誤的
select job "工種",avg(sal) "平均工資",sum(comm) from emp group by job--正確的
select job "工種",max(sal) "最高工資",sum(comm) from emp group by job--正確的
select job "工種",max(mgr) "管理者為",sum(comm) from emp group by job--正確的
select job "工種",sum(mgr) "測試",sum(comm) from emp group by job--正確的
select job "工種",max(ename) "ename最大值",sum(comm) from emp group by job--正確的

select job "工種",count(mgr) "測試",sum(comm) from emp group by job--正確的
select job "工種",count(ename) "測試",sum(comm) from emp group by job--正確的
select job "工種",count(hiredate) "測試",sum(comm) from emp group by job--正確的
--關於分組後的order
select job "工種",max(sal) "最高工資",sum(comm) from emp group by job order by job desc--正確的
select job "工種",max(sal) "最高工資",sum(comm) from emp group by job order by comm desc--錯誤的
select job "工種",max(sal) "最高工資",comm "提成",sum(comm) from emp group by job,comm order by comm desc--正確的

select * from emp
--1clerk null
--2sale  300
--3sale  500
--4man   null
--5sale  1400
--6man   null
--7man   null
--8ana   null
--9pre   null
--10sal   0
--11clerk null
--12clerk null

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.