1. 程式人生 > >oracle資料庫學習筆記(二)之分組統計查詢

oracle資料庫學習筆記(二)之分組統計查詢

統計函式(分組函式)

在oracle裡面對於統計函式提供有很多種,下面主要介紹標準的五個統計函式:

- 統計表中的資料量:COUNT(*  |  欄位  |  DISTINCT 欄位)

- 統計平均值: AVG(列)

- 求和:SUM(列)

- 最大值 :MAX(列)

- 最小值:MIN(欄位)

對於以上的統計函式理論上是不區分資料型別的,但是實際來講希望記住以下原則:

。COUNT():是作為資料表的記錄數量統計的,一般情況下建議這個函式只設置不為空的列

。AVG()、SUM(): 是作為資料的統計結果的,所以建議使用數字咧

。MAX()、MIN():可以使用數字、字串、日期完成統計

示例:統計所有僱員的數量、總工資、平均工資

SELECT COUNT(*),SUM(sal+NVL(comm,0)),AVG(sal+NVL(comm,0)) FROM emp ;
示例:統計出最早和最晚的僱用日期
SELECT MAX(hiredate),MIN(hiredate) FROM emp ;
思考題:請解釋COUNT(*)、COUNT(欄位)、COUNT(DISTINCT 欄位)的區別?

|-在使用COUNT()函式的時候最簡化的做法就是寫上一個“*”,如果COUNT()使用的欄位上不為null,那麼COUNT(*)和COUNT(欄位)沒有區別

SELECT COUNT(*),COUNT(empno) FROM emp ;

|-如果欄位上有null時候,使用COUNT(欄位),則null的資料不進行統計,只統計出有資料的

SELECT COUNT(*),COUNT(comm) FROM emp;

|-如果不想統計重複資料的時候,使用COUNT(DISTINCT  欄位)可以消除重複

SELECT COUNT(*),COUNT(mgr),COUNT(DISTINCT job) FROM emp ;

分組統計查詢

如果要想進行分組統計查詢,則其定義語法如下:
④SELECT 列 [別名],列 [別名],列 [別名],... | 統計函式 , .... 
①FROM 表1 [別名],表2 [別名],..... 
②[WHERE 過濾條件(s)] 
③[GROUP BY 分組欄位 , ....] 
⑤[ORDER BY 欄位 [ASC | DESC],欄位 [ASC | DESC],...]
示例:按照部門進行分組,統計出每個部門的人數,平均工資
SELECT deptno,COUNT(*),AVG(sal) FROM emp GROUP BY deptno ;

提示:分組限制
。統計函式可以不結合GROUP BY單獨使用,但是要求此時的SELECT子句中只能出現統計函式,而不能出現其他任何的欄位
錯誤程式碼 正確程式碼
SELECT empno,COUNT(*),AVG(sal) FROM emp ; SELECT COUNT(*),AVG(sal) FROM emp ;
。在使用GROUP BY分組時候,SELECT子句中只能出現分組欄位和統計函式,其他任何欄位都不允許 出現

。分組時的統計函式可以巢狀使用,但是一旦巢狀使用則SELECT子句中不允許再出現任何的欄位,包括分組欄位

錯誤程式碼 正確程式碼
SELECT deptno,MAX(AVG(sal))
FROM emp
GROUP BY deptno ;
SELECT MAX(AVG(sal))
FROM emp
GROUP BY deptno ;

示例:查詢出每個部門的名稱、僱員人數、平均工資、最高工資

SELECT d.dname,COUNT(*),AVG(e.sal) FROM emp e,dept d WHERE e.deptno(+)=d.deptno GROUP BY d.dname ;

HAVING子句


此時執行順序為

⑤SELECT 列 [別名],列 [別名],列 [別名],... | 統計函式 , ....
①FROM 表1 [別名],表2 [別名],..... 
②[WHERE 過濾條件(s)] 
③[GROUP BY 分組欄位 , ....] 
④[HAVING 分組過濾] 
⑥[ORDER BY 欄位 [ASC | DESC],欄位 [ASC | DESC],...]
思考:關於HAVING 和WHERE 的區別

|- WHERE子句是在GROUP BY之前執行,而HAVING是在GROUP BY之後執行

|- WHERE可以單獨使用,而HAVING必須結合GROUP BY一起使用

|- WHERE不允許使用統計函式,而HAVING可以使用統計函式

示例:查詢出所有非銷售人員的工資總和,並且要求滿足從事同一工作的僱員工資的總和大於5000,顯示的結果按照降序排列。

SELECT job,SUM(sal) sum 
FROM emp WHERE job<>'SALESMAN' 
GROUP BY job 
HAVING SUM(sal)>5000 ORDER BY sum DESC ;


相關推薦

oracle資料庫學習筆記分組統計查詢

統計函式(分組函式) 在oracle裡面對於統計函式提供有很多種,下面主要介紹標準的五個統計函式: - 統計表中的資料量:COUNT(*  |  欄位  |  DISTINCT 欄位) - 統計平均值: AVG(列) - 求和:SUM(列) - 最大值 :MAX(列) -

IO流學習筆記BufferedWriter與BufferedReader及例項Demo

在之前的學習筆記(http://blog.csdn.net/megustas_jjc/article/details/72853059)中,FileWriter與FileReader的Demo使用的中轉資料buf實際就是緩衝區,是由我們自己建立的。 緩衝區可以提高效率,Java對緩衝區進行了封裝,封裝成了物

Servlet學習筆記Servlet路徑對映配置、Servlet介面、ServletConfig、ServletContext

Servlet路徑對映配置 要使Servlet物件正常的執行,需要進行適當的配置,以告訴Web容器哪個請求呼叫哪個Servlet物件處理,對Servlet起到一個註冊的作用。Servlet的配置資訊包含在web.xml檔案中,主要通過兩步進行配置: (1)宣告Servlet物件 通過< servlet&

Oracle資料庫學習心得

20、單行函式:每次執行函式,傳入一行列值,返回一個結果;多行函式:每次執行函式,傳入多行列值,返回一個結果 21、字元型函式: (1)大小寫轉換:lower(小寫)、upper(大寫)、initcap(首字母大寫) (2)拼接字串:concat,例 selec

mybatis學習筆記XML方式的基本用法

在前一篇筆記中,我們建立了配置 mybatis-config.xml 檔案,原來 mappers標籤下的內容為: <mappers> <mapper resource="tk/mybatis/simple/mapper/CountryMa

A-GPS學習筆記 SUPL

1. GNSS GNSS的全稱是全球導航衛星系統(Global Navigation Satellite System),它是泛指所有的衛星導航系統,包括全球的、區域的和增強的,如美國的GPS、俄羅斯的Glonass、歐洲的Galileo、中國的北斗衛星導航系統,以及相關的增強系統,如美國的WAAS(廣域增

TensorFlow學習筆記視覺化(Tensorboard

一、Tensorboard簡介 Tensorboard是TensorFlow自帶的一個強大的視覺化工具,也是一個web應用程式套件。通過將tensorflow程式輸出的日誌檔案的資訊視覺化使得tensorflow程式的理解、除錯和優化更加簡單高效。支援其七種視

資料庫學習筆記

一,使用where選擇限定的資料行 操作符 含義 = 等於 > 大於 >=

Android百度地圖開發學習筆記定位當前位置和自定義控制元件返回

在完成HelloMap後,接來完成的重要功能是如何定位當前位置和如何一鍵返回。效果圖如下: 這裡的控制元件就是一個ImageView,自己去百度一個好看的圖片就可以了。 一 定位當前位置和自定義控制元件返回 1.官方技術文件 可以先點選百度地圖定位技術文件,仔細看一下相關

pelican學習筆記Writing content

Writing content 2018/01/25 Articles and pages 文章和頁面 Pelican 認為 “文章(articles)” 是按時間順序排列的內容, 如部落格上的帖子, 因此與日期相關。 “頁面(pages)”

多執行緒學習筆記執行緒安全問題

執行緒安全問題的現象 首先讓我們考慮一個問題: class Demo implements Runnable{ private int num = 100; //實現Runnable介面,覆蓋run方法 public void r

OSG學習筆記OSG靜態庫的使用

OSG是以外掛的方式管理,因此要使用OSG的某個格式的解析不僅要有其相關lib還必須將相關外掛引入,下面通過一個簡單的例子加以說明。 OSG相關外掛引入使用USE_OSGPLUGIN,例如: USE_OSGPLUGIN(ive) USE_OSGPLUGIN(osg) US

MongoDB 學習筆記 查詢

最簡單的查詢 個人認為mongoDB是面向物件的吧。 例如最簡單的查詢  整個資料集只有三條資料 第一查詢姓名為張三的  資料 查詢的條件比較好寫 隨意   db.collection.find(查詢條件)   例如 15 得到的結果是這樣  如果你不

Linq學習筆記——GroupBy 分組輸出資料

var skill = query.GroupBy(i=>i.SkillTypeId) .Select(i => new { skillType=i.key, skill=i.Sel

設計模式學習筆記 設計基本原則【單一職責原則】

code 分享 開發者 實際應用 需要 ret ext file類 tor 單一職責原則(SRP: Single Responsibility Principle) 名詞解釋: 1) 職責:是指類變化的原因。 2) 職責擴散:就是因為某種原因,職責P被分化為粒度更細的職責P

Unity3DMecanim動畫系統學習筆記:模型導入

leg character ... sdk ocs 物體 mat 版本 sset 我們要在Unity3D中使用上模型和動畫,需要經過下面幾個階段的制作,下面以一個人形的模型開發為準來介紹。 模型制作 模型建模(Modelling) 我們的美術在建模時一般會制作一個稱為

Oracle學習筆記——臨時表

create 永久 以及 alter 會話 數量 ger pan 復雜 在針對大數據量的多表級聯查詢或復雜事務處理的時候,引入Oracle臨時表是一種不錯的策略。因此,在解決實際需求時經常會遇到需要使用存儲過程和臨時表相互配合的情況。下面就Oracle如何創建臨時表以及註意

JVM學習筆記--方法調用靜態分配和動態分配

extends AD 找到 n! sse 運行時 面試 static sys 本篇文章從JVM的角度來理解Java學習中經常提到的重載和重寫。 方法調用:方法調用不等同於方法執行,在Java虛擬機中,方法調用僅僅是為了確定調用哪個版本的方法。方法調用分為解析調用和分派。解析

PHP學習筆記--資料庫操作

下面使用簡單的例子說下在PHP中操作MySql資料庫,內容包括連線資料庫、查詢操作、事務及儲存過程。 1、訪問MySql一般步驟 1)連線MySql伺服器 使用mysql_connect()函式建立與MySql伺服器的連線。 2)選擇MySql資料庫 使用mysql_select

嵌入式核心及驅動開發學習筆記 實現應用控制驅動

Linux系統根據驅動程式實現的模型框架將裝置驅動分成字元裝置驅動、塊裝置驅動、網路裝置驅動三大類。這裡簡單理解一下概念 字元裝置:裝置按位元組流處理資料,通常用的串列埠裝置、鍵盤裝置都是這種。 塊裝置:裝置按塊單位對資料處理,通常是儲存裝置。 網路裝置:顧名思義,建立在soc