分組函數(shù)

一、分組函數(shù)概述
  • 分組函數(shù)是對(duì)表中一組記錄進(jìn)行操作,每組只返回一個(gè)結(jié)果,即首先要對(duì)表記錄進(jìn)行分組,然后在進(jìn)行操作匯總,每組返回一個(gè)結(jié)果,分組時(shí)可能是整個(gè)表分為一組,也可能根據(jù)條件分成多組。
  • 分組函數(shù)常用到以下5個(gè)函數(shù):
  1. MIN
  2. MAX
  3. SUM
  4. AVG
  5. COUNT
二、分組函數(shù)
  • MIN函數(shù)和MAX函數(shù)

MIN和MAX函數(shù)主要是返回每組的最小值和最大值

  • MIN([DISTINCT|ALL] 參數(shù))
  • MAX([DISTINCT|ALL] 參數(shù))
  • MIN和MAX可以用于任何數(shù)據(jù)類型
  • 例如:查詢?nèi)肼氉钤绾妥钔淼娜掌?/li>
SELECT MIN(hiredate),MAX(hiredate)
FROM emp;
  • SUM函數(shù)和AVG函數(shù)

SUM和AVG函數(shù)分別返回每組的總和及平均值

  • SUM([DISTINCT|ALL] 參數(shù))
  • AVG([DISTINCT|ALL] 參數(shù))
  • SUM和AVG函數(shù)都是只能夠?qū)?shù)值類型的列或表達(dá)式操作
  • 例如:查詢職位以SALES開(kāi)頭的所有員工平均工資、最低工資、最高工資、工資和。
SELECT AVG(sal),MAX(sal),MIN(sal),SUM(sal)
FROM emp
WHERE job LIKE 'SALES%';
  • COUNT函數(shù)

COUNT函數(shù)的主要功能是返回滿足條件的每組記錄條數(shù)

  • COUNT(*|{[DISTINCT|ALL] 參數(shù)})
  • COUNT(*):返回表中滿足條件的行記錄數(shù)
  • 例如:查詢部門(mén)30有多少員工,查詢部門(mén)30有多少人領(lǐng)取獎(jiǎng)金
    返回所有滿足條件:
SELECT COUNT(*)
FROM emp
WHERE deptno = 30; 

返回參數(shù)滿足非空(NULL)條件下:

SELECT COUNT(comm)
FROM emp
WHERE deptno = 30;
  • 組函數(shù)中DISTINCT
  • DISTINCT會(huì)消除重復(fù)記錄后在使用組函數(shù)
  • 例如:查詢所有員工的部門(mén)數(shù)量
SELECT COUNT(DISTINCT deptno)
FROM emp;
  • 分組函數(shù)中的空值處理
  • 除了COUNT(*)之外,其他所有分組函數(shù)都會(huì)忽略列中的空值,然后再進(jìn)行計(jì)算。
SELECT AVG(comm)
FROM emp;
  • 在分組函數(shù)中使用NVL函數(shù)
  • NVL函數(shù)可以使分組函數(shù)強(qiáng)制包含含有空值的記錄
SELECT AVG(NVL(comm,0))
FROM emp;
三、用GROUP BY子句創(chuàng)建數(shù)據(jù)組
  • 通過(guò)GROUP BY子句可將表中滿足WHERE條件的記錄按照指定的列劃分成若干小組
  • 在SELECT列表中除了分組函數(shù)那些項(xiàng),所有列都必須包含在GROUP BY子句中。
  • 其中GROUP BY子句指定要分組的列
  • 查詢每個(gè)部門(mén)的編號(hào),平均工資
SELECT deptno, AVG( sal)
FROM emp
GROUP BY deptno;
  • GROUP BY所指定的列并不是必須出現(xiàn)在SELECT列表中。
SELECT AVG( sal)
FROM emp
GROUP BY deptno;
四、使用HAVING子句
  • 不能再WHERE子句中限制分組
SELECT deptno,max(sal)
FROM emp
WHERE MAX(sal) > 2900
GROUP BY deptno;
                       //注意:不能使用限制組
  • 可以通過(guò)HAVING子句限制分組
  • 記錄已經(jīng)分組
  • 使用過(guò)組函數(shù)
  • 與HAVING子句匹配的結(jié)果才輸出
SELECT deptno,max(sal)
FROM emp
GROUP BY deptno
HAVING MAX(sal) > 2900;
SELECT job,SUM(sal)  PAYROLL 
FROM emp 
WHERE job NOT LIKE 'SALES%' 
GROUP BY job 
HAVING SUM(sal) > 5000
ORDER BY SUM(sal);
五、SELECT語(yǔ)句的執(zhí)行過(guò)程
  • 通過(guò)FROM子句中找到需要查詢的表;
  • 通過(guò)WHERE子句進(jìn)行非分組函數(shù)篩選判斷;
  • 通過(guò)GROUP BY子句完成分組操作;
  • 通過(guò)HAVING子句完成函數(shù)篩選判斷;
  • 通過(guò)SELECT子句選擇顯示的列或表達(dá)式及組函數(shù);
  • 通過(guò)ORDER BY子句進(jìn)行排序操作。
    這個(gè)過(guò)程非常重要!?。?!
六、組函數(shù)的嵌套
  • 注意:與單行函數(shù)不同,組函數(shù)只能嵌套兩層。
SELECT MAX(AVG(sal))
FROM emp
GROUP BY deptno;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 筆記: 一、聚合函數(shù):計(jì)數(shù) 最大值 最小值 平均數(shù) 求和 1.計(jì)數(shù) COUNT() 忽略NULL值 方式1:COU...
    鳳之鳩閱讀 5,695評(píng)論 0 1
  • 引出 ?請(qǐng)思考如下問(wèn)題? –查詢所有員工的每個(gè)月工資總和,平均工資? –查詢工資最高和最低的工資是多少? –查詢公...
    C_cole閱讀 7,394評(píng)論 0 3
  • 目標(biāo) 聚合函數(shù) 分組函數(shù) 子查詢 多行子查詢 引出 ?請(qǐng)思考如下問(wèn)題? –查詢所有員工的每個(gè)月工資總和,平均工資?...
    wqjcarnation閱讀 4,203評(píng)論 0 6
  • 1.簡(jiǎn)介 數(shù)據(jù)存儲(chǔ)有哪些方式?電子表格,紙質(zhì)文件,數(shù)據(jù)庫(kù)。 那么究竟什么是關(guān)系型數(shù)據(jù)庫(kù)? 目前對(duì)數(shù)據(jù)庫(kù)的分類主要是...
    喬震閱讀 2,027評(píng)論 0 2
  • 用戶和員工可以使由之,這本書(shū)可以了解到小米想要讓我們知道的東西,作為品牌宣傳和員工內(nèi)訓(xùn)很合適。 全書(shū)...
    朱大爺閱讀 193評(píng)論 0 0

友情鏈接更多精彩內(nèi)容