分組與分組函數--=================================/*一、分組:分組函數可以對行集進行操作,并且為每組給出一個結果。使用groupbycolumn1,column2,..按columm1,column2進行分組,即column1,column2組合相同的值為一個組二、常用分組函數:*/AVG([DISTINCT|ALL]n)--求平均" />

黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

SQL基礎-->分組與分組函數

系統 2465 0

--=================================

--SQL 基礎 --> 分組與分組函數

--=================================

/*

一、分組:

??? 分組函數可以對行集進行操作,并且為每組給出一個結果。

?? 使用 group by column1 , column2,.. columm1,column2 進行分組,即 column1,column2 組合相同的值為一個組

?

二、常用分組函數: */

??? AVG ( [DISTINCT|ALL]n ) ??????? -- 求平均值,忽略空值

??? COUNT ({*| [DISTINCT|ALL]expr} ) ? -- 統計個數,其中 expr 用來判定非空值 ( 使用 * 計算所有選定行,包括重復行和帶有空值的行 )

??? MAX ( [DISTINCT|ALL]expr ) ??????? -- 求最大值,忽略空值

??? MIN ( [DISTINCT|ALL]expr ) ??????? -- 求最小值,忽略空值

??? SUM ( [DISTINCT|ALL]n ) ?????? -- 求和,忽略空值

/*

三、分組函數語法: */

??? SELECT [column,] group_function ( column ), ...

??? FROM table

??? [WHERE condition]

??? [GROUP BY column]

??? [ORDER BY column] ;

/*

四、分組函數使用準則:

??? DISTINCT 使函數只考慮非重復值, ALL 則考慮包括重復值在內的所有值。默認為 ALL

  帶有 expr 參數的函數的數據類型可以為 CHAR,VARCHAR2,NUMBER,DATE.

??? 所有分組函數都忽略空值。可以使用 NVL,NVL2, COALESCE 函數代替空值

??? 使用 GROUP BY 時, Oralce 服務器隱式地按照升序對結果集進行排序??梢允褂? ORDER BY 更改排序結果。 ?

?

???? 可以使用 NVL 函數強制分組函數包含空值,如: */

??????? select avg ( nvl ( comm , 0 )) from emp ; ??

/* ????

五、 GROUP BY 子句的語法:

??? 使用 GROUP BY 子句可以將表中的行分成更小的組,然后使用分組函數返回每一組的匯總信息 */

??? SELECT column , group_function ( column )

??? FROM table

??? [WHERE condition]

??? [GROUP BY group_by_expression]

??? [ORDER BY column] ;

?

??? GROUP BY ? --group_by_expression 即為對哪些列進行分組

/* ?

六、 GROUP BY 使用準則:

??? SELECT 中出現的列,如果未出現在分組函數中,則 GROUP BY 子句必須包含這些列

??? WHERE 子句可以某些行在分組之前排除在外

??? 不能在 GROUP BY 中使用列別名

??? 默認情況下 GROUP BY 列表中的列按升序排列

??? GROUP BY 的列可以不出現在分組中 ?

???

七、分組過濾:

??? 使用 having 子句

???

??? having 使用的情況:

?????? 行已經被分組

?????? 使用了組函數

?????? 滿足 having 子句中條件的分組將被顯示

?

八、演示: */

-- 為數字數據使用 AVG SUM 方法

??? SQL > select min ( sal ) as min_sal , max ( sal ) as max_sal ,

??? ? 2 ??? avg ( sal ) as avg_sal , sum ( sal ) as sum_sal

??? ? 3 ? from scott . emp ;

?

??? ?? MIN_SAL ??? MAX_SAL ??? AVG_SAL ??? SUM_SAL

??? ---------- ---------- ---------- ----------

?????? ?? 800 ?????? 5000 2073.21429 ????? 29025

?

-- 對于數字 , 字符和日期數據類型 , 你能使用 MIN MAX 方法 ?? ??

??? SQL > select min ( hiredate ) as min_hiredate , max ( hiredate ) as max_hiredate from scott . emp ;

?

??? MIN_HIRED MAX_HIRED

??? --------- ---------

??? 17 - DEC - 80 23 - MAY - 87

?

-- 使用 count(*),count(expr),count(distinct expr)

-- 注意 coung(*) 包含空值、重復值, count(expr) 過濾空值, count(distinct expr) 即過濾空值,也過濾重復值

??? SQL > select count (*), count ( mgr ), count ( distinct mgr ) from emp ;

?

??? ? COUNT (*) COUNT ( MGR ) COUNT ( DISTINCTMGR )

??? ---------- ---------- ------------------

?????????? 14 ???????? 13 ????????????????? 6

?

-- 使用 NVL 函數強制分組函數包含空值

??? SQL > select avg ( comm ) , avg ( nvl ( comm , 0 )) from emp ;

?

??? ? AVG ( COMM ) AVG ( NVL ( COMM , 0 ))

??? ---------- ----------------

?????? ?? 550 ?????? 157.142857 ???

?

-- 使用 group by 子句來分組

??? SQL > select job , avg ( sal ) from emp group by job ;

?

??? JOB ???????? AVG ( SAL )

??? --------- ----------

??? CLERK ???????? 1037.5

??? SALESMAN ??????? 1400

??? PRESIDENT ?????? 5000

??? MANAGER ?? 2758.33333

??? ANALYST ???? ???? 3000

?

--GROUP BY 的列可以不出現在分組中 ??

??? SQL > select avg ( sal ) from emp group by job order by avg ( sal ) desc ;

?

??? ? AVG ( SAL )

??? ----------

?????? ? 5000

?????? ? 3000

??? 2758.33333

?????? ? 1400

?????? 1037.5

?

-- 錯誤的用法, SELECT 中的有些列沒有在 GROUP BY 子句中出現

??? SQL > select job , avg ( sal ) from emp ;

??? select job , avg ( sal ) from emp

?????? ?? *

??? ERROR at line 1 :

??? ORA - 00937 : not a single - group group function ?

?

-- 使用 having 子句過濾分組結果

-- 查詢平均工資高于的部門號,及其平均工資。

?

??? select deptno , avg ( sal ) from emp group by deptno

??? having avg ( sal )> 2000 ;

?

-- 查出平均工資在以上的工種 (job)

??? select job , avg ( sal ) from emp group by job having avg ( sal )> 2000 ;

???

-- 求人數在人以上的部門

??? select deptno , count (*) from emp group by deptno having count (*)> 5 ;

???

-- 使用分組函數的嵌套

??? SQL > select max ( avg ( sal )) from emp group by deptno ;

?

??? MAX ( AVG ( SAL ))

??? -------------

??? ?? 2916.66667

/*

九、更多 */

Oracle 數據庫實例啟動關閉過程

?

Oracle 10g SGA 的自動化管理

?

使用 OEM,SQL*Plus,iSQL*Plus 管理 Oracle 實例

?

Oracle 實例和 Oracle 數據庫 (Oracle 體系結構 )

?

SQL 基礎 --> 常用函數

?

SQL 基礎 --> 過濾和排序

?

SQL 基礎 -->SELECT 查詢

?

SQL基礎-->分組與分組函數


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論