真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Oracle專題6之Oracle的分組函數(shù)與數(shù)組分組

  • 在關(guān)系數(shù)據(jù)庫(kù)中,使用數(shù)據(jù)分組可以取得表數(shù)據(jù)的匯總信息。數(shù)據(jù)分組是通過(guò)分組函數(shù)、Group by以及having等子句共同實(shí)現(xiàn)的。

    1、分組函數(shù)

  • SQL函數(shù)包含單行函數(shù)和多行函數(shù)。分組函數(shù)屬于多行函數(shù)。作用于一組數(shù)據(jù),并對(duì)一組數(shù)據(jù)返回一個(gè)值。
  • 分組函數(shù):SELECT [column,] group function(column) ... FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column];。
  • 常用的分組函數(shù):AVG、SUM、MIN、MAX、COUNT、WM_CONCAT.。

    a、AVG()

  • 求平均值。舉例:SELECT avg(sal) FROM emp;
    SQL> SELECT avg(sal) FROM emp;
        AVG(SAL)
                2135

    b、SUM()

  • 求和。舉例:SELECT SUM(sal) FROM emp;
    SQL> SELECT MIN(sal) FROM emp;
        MIN(SAL)
                 800

    c、MIN

  • 求最小值。舉例:SELECT MIN(sal) FROM emp;
    SQL> SELECT MIN(sal) FROM emp;
    MIN(SAL)
       800

d、COUNT()

  • 計(jì)數(shù)(統(tǒng)計(jì))。舉例:求員工的總?cè)藬?shù),SELECT COUNT(*) FROM emp;
    SQL> SELECT COUNT(*) FROM emp;
    COUNT(*)-
        15
  • 在使用分組時(shí)可以使用DISTINCT關(guān)鍵字來(lái)去重。
    SQL> select count(distinct deptno) from emp;
    COUNT(DISTINCTDEPTNO)
                    3

    e、WM_CONCAT行轉(zhuǎn)列(讓查詢結(jié)果行轉(zhuǎn)列)

  • 該函數(shù)可以把列值以‘,’號(hào)分隔起來(lái),并顯示成一行。
    SQL> select wm_concat(ename) from emp;
    WM_CONCAT(ENAME)
    EASON,G_EASON,ALLEN,WARD,JONES,MARTIN,BLAKE,CLARK,SCOTT,KING,TURNER,ADAMS,JAMES,
    FORD,MILLER

    2、Group by子句

  • 作用:可以將表中的數(shù)據(jù)分成若干組。
  • Group by子句的語(yǔ)法:SELECT [column,] group function(column), ... FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column];
  • 例如:求出每個(gè)部分的平均工資,要求顯示:部門號(hào),部分的平均工資。
  • SELECT deptno, avg(sal) from emp group by deptno;
    SQL> SELECT deptno, avg(sal) from emp group by deptno;
    DEPTNO   AVG(SAL)
        30 1566.66667
        20     2312.5
        10 2916.66667
  • 在SELECT列表中所有未包含在組函數(shù)中的列都應(yīng)包含在GROUP BY子句中。如按照部門和職位進(jìn)行分組:
    SQL> SELECT deptno, job, avg(sal) from emp group by deptno, job;
            DEPTNO JOB         AVG(SAL)
                    20 CLERK            950
                    30 SALESMAN        1400
                    20 MANAGER         2975
                    30 CLERK            950
                    10 PRESIDENT       5000
                    30 MANAGER         2850
                    10 CLERK           1300
                    20 ANALYST         3000
                    10 MANAGER         2450
    已選擇9行。
  • 包含在group by 子句中的列不必包含在SELECT列表當(dāng)中:
    SQL> select avg(sal) from emp group by deptno;
        AVG(SAL)
    1566.66667
            2312.5
    2916.66667
  • 再如示例:求出每個(gè)部分的員工姓名,要求顯示:部分標(biāo)號(hào)、員工姓名。
    SQL> select deptno, WM_concat(ename) from emp group by deptno;
    DEPTNO      WM_CONCAT(ENAME)
        10            CLARK,MILLER,KING
        20            EASON,FORD,ADAMS,SCOTT,JONES,G_EASON
        30            ALLEN,JAMES,TURNER,BLAKE,MARTIN,WARD

    3、Having子句

  • 作用:用于對(duì)分組后的結(jié)果進(jìn)行過(guò)濾。
  • 例子:請(qǐng)平均工資大于2500的部分,要求顯示:部門號(hào),平均工資]
  • 不能再WHERE子句中使用組函數(shù),可以在having子句中使用組函數(shù)。
    SQL> select deptno,avg(sal) from emp group by deptno having avg(sal) >2500;
    DEPTNO   AVG(SAL)
        10 2916.66667
  • having子句和group by子句通常一起使用。

  • 如果條件中沒(méi)有組函數(shù),正常使用where語(yǔ)句就可以。比如說(shuō):select deptno, avg(sal) from emp where deptno=10 group by deptno;
    SQL> select deptno, avg(sal) from emp where deptno=10 group by deptno;
    DEPTNO   AVG(SAL)
        10 2916.66667
  • where使得分組記錄數(shù)大大降低,從而提高效率。從SQL優(yōu)化角度來(lái)看,盡量使用where子句。先過(guò)濾然后分組。

  • 分組函數(shù)的嵌套:求部分平均工資的最大值。
  • select max(avg(sal)) from emp group by deptno;
    SQL> select max(avg(sal)) from emp group by deptno;
    MAX(AVG(SAL))
         2916.66667

文章標(biāo)題:Oracle專題6之Oracle的分組函數(shù)與數(shù)組分組
分享URL:http://weahome.cn/article/ggjiio.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部