|
第六章 綜合數(shù)據(jù)和分組函數(shù)
分組函數(shù)是對一批(一組)數(shù)據(jù)進(jìn)行操作(綜合)之后返回一個值。這批數(shù)據(jù)可能是整個表,也可能是按某種條件把該表分成的組。不少專家認(rèn)為對于管理者或決策者來說綜合數(shù)據(jù)才是最有價(jià)值的信息。例如:對于一個大型企業(yè)的老總,他/她可能對企業(yè)的平均工資很感興趣,但對該企業(yè)中每個員工的具體工資就沒什么興趣了。 6.1 五個常用的分組函數(shù) ORACLE常用的分組函數(shù)有以下五個: Ø COUNT
Ø AVG Ø SUM Ø MAX Ø MIN 下面我們來分別介紹這五個分組函數(shù)。
6.2 COUNT函數(shù) 我們首先介紹COUNT函數(shù)。COUNT的格式如下: Ø COUNT({*[ DISTINCT|ALL]表達(dá)式}: 該函數(shù)返回查尋的行數(shù)。
我繼續(xù)第二章開始時(shí)的例子。假設(shè)你的老板在決定把誰炒尤魚之前,想知道公司里到底有多少員工。你可以使用例6-1的查尋語句來完成他的重托: (在學(xué)習(xí)ORACLE時(shí),你要想象使用ORACLE數(shù)據(jù)庫管理系統(tǒng)的公司規(guī)??赡芎艽?,例如該公司有一百多萬名員工。這樣你就可以比較容易地理解所討論的問題了。)
例6-1
SQL> SELECT COUNT(*) 2 FROM emp; 例6-1結(jié)果 COUNT(*) ---------- 14 COUNT(*)返回表中所有的行包括空行和重復(fù)的行。
如果你的老板想知道公司里有多少員工有經(jīng)理管理(不屬于高級管理層)。你可能用例6-2的查尋語句來完成他的這一重托: 例6-2
SQL> SELECT COUNT(mgr) 2 FROM emp; 例6-2結(jié)果 COUNT(MGR) ---------- 13 所謂有經(jīng)理管理的員工就是mgr不為空(NULL)的員工。因?yàn)镃OUNT(表達(dá)式) 返回表中所有表達(dá)式 為非空的行,所以COUNT(mgr) 返回表中所有mgr為非空的行,即有經(jīng)理管理的員工的人數(shù)。
6.3 AVG 和SUM函數(shù) 介紹完了COUNT函數(shù)之后,現(xiàn)在我們來討論AVE 和SUM函數(shù)。 AVG函數(shù)的格式如下:
Ø AVG([DISTINCT|ALL]表達(dá)式): 該函數(shù)返回表達(dá)式的平均值。
SUM函數(shù)的格式如下:
Ø SUM([DISTINCT|ALL]表達(dá)式): 該函數(shù)返回表達(dá)式的總合。
現(xiàn)在假設(shè)你的老板還想知道公司的員工的平均工資和工資總合,你就可以使用如下的查尋語句(例6-3)來完成他的要求: 例6-3
SQL> SELECT AVG(sal) "Average Salary", SUM(sal) "Summary", COUNT(sal) "Records" 2 FROM emp; 例6-3結(jié)果 Average Salary Summary Records -------------- ---------- ---------- 2073.21429 29025 14 在例6-3的查尋語句中,你為每一列給出了一個有意義的別名,這一點(diǎn)在工作中也許很重要,特別當(dāng)你的查尋結(jié)果或報(bào)告是拿給非計(jì)算機(jī)專業(yè)人員看時(shí)。在工作中要牢牢記?。?#8220;客戶永遠(yuǎn)是我們的上帝”??茨銏?bào)告的人就是客戶,就是上帝。如果上帝不滿意了,你的飯碗就難保了。
6.4 MIN和MAX函數(shù) 介紹完了AVE 和SUM函數(shù)之后,現(xiàn)在我們來討論MAX 和MIN函數(shù)。 MAX函數(shù)的格式如下:
Ø MAX([DISTINCT|ALL]表達(dá)式): 該函數(shù)返回表達(dá)式的最大值。
MIN函數(shù)的格式如下:
Ø MIN([DISTINCT|ALL]表達(dá)式): 該函數(shù)返回表達(dá)式的最值。
如過你的老板現(xiàn)在還想知道公司中員工的最低工資和最高工資,你可以使用下例的查尋語句(例6-4)來完成他的這一要求:
例6-4
SQL> SELECT MIN(sal) "Lowest Salary", MAX(sal) "Highest Salary" 2 FROM emp; 例6-4結(jié)果 Lowest Salary Highest Salary ------------- -------------- 800 5000 不像AVE和SUM函數(shù)只能操作數(shù)字型數(shù)據(jù),MIN和MAX函數(shù)不但可用于數(shù)字型數(shù)據(jù)而且還可以用于字符型數(shù)據(jù)和日期型數(shù)據(jù)。例6-5的查尋語句就是一個MIN和MAX函數(shù)用于字符型數(shù)據(jù)的例子:
例6-5
SQL> SELECT MIN(job), MAX(job) 2 FROM emp; 例6-5結(jié)果 MIN(JOB) MAX(JOB) --------- --------- ANALYST SALESMAN 假設(shè)你的老板又想知道公司雇傭的第一個員工的日期和公司雇傭的最后一個員工的日期,你就可以使用例6-6的查尋語句來完成他的這一新要求:
例6-6
SQL> SELECT MIN(hiredate) "First Day", MAX(hiredate) "Last Day" 2 FROM emp; 例6-6結(jié)果
First Day Last Day ---------- ---------- 17-12月-80 23-5月–87 在前面幾節(jié)中,我們都是把一個表看成一個大組來處理。我們可以使用GROUP BY 子句把一個表化分成若干個組。在一個表中建立多組數(shù)據(jù)
6.5 GROUP BY子句的應(yīng)用 如過你的老板現(xiàn)又想知道公司中,按職位(JOB)分類,每類員工的平均工資,你可能用例6-7的查尋語句來完成他的這一要求: 例6-7
SQL> SELECT job, AVG(sal) "Average Salary" 2 FROM emp 3 GROUP BY job; 例6-7結(jié)果 JOB Average Salary --------- -------------- ANALYST 3000 CLERK 1037.5 MANAGER 2758.33333 PRESIDENT 5000 SALESMAN 1400 例6-7的結(jié)果顯示除了總裁(PRESIDENT)以外,分析員(ANALYST)的工資最高。公司可以根據(jù)這一信息重組一些職位(JOB),例如將分析員的一些簡單的工作分給文員(CLERK)來做。這樣就可以解雇一些多余的分析員,從而為公司節(jié)省一些開銷
本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/ocean20/archive/2008/08/06/2776674.aspx
|
|
|