日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

聚合函數

與大多數其他關系數據庫產品一樣,PolarDB PostgreSQL版(兼容Oracle)也支持聚合函數。聚合函數從多個輸入行計算單個結果。例如,有一些聚合可對一組行計算COUNT、SUM、AVG(平均值)、MAX(最大值)和MIN(最小值)。

示例

以下示例均在示例數據庫基礎上進行查詢。

  • 通過以下查詢找到最高和最低工資:

    SELECT MAX(sal) highest_salary, MIN(sal) lowest_salary FROM emp;

    返回結果如下:

     highest_salary | lowest_salary 
    ----------------+---------------
               5000 |           800
    (1 row)
  • 通過以下查詢找到工資最高的員工:

    SELECT ename FROM emp WHERE sal = MAX(sal);

    返回結果如下:

    ERROR:  aggregate functions are not allowed in WHERE

    以上查詢無效,因為聚合函數MAX不能在WHERE子句中使用。存在此限制的原因是,WHERE子句確定將進入聚合狀態的行,因此必須在計算聚合函數之前對該子句進行求值。但是,可通過使用子查詢來重新表述該查詢以達到預期結果:

    SELECT ename FROM emp WHERE sal = (SELECT MAX(sal) FROM emp);

    返回結果如下:

     ename 
    -------
     KING
    (1 row)
  • 子查詢是一項獨立的計算,它獲取自己的結果,與外部查詢互不影響。

    • 與GROUP BY子句結合使用。例如,通過以下查詢獲取每個部門中的最高工資。

      SELECT deptno, MAX(sal) FROM emp GROUP BY deptno;

      返回結果如下:

       deptno |   max
      --------+---------
           10 | 5000.00
           20 | 3000.00
           30 | 2850.00
      (3 rows)
    • 與WHERE與HAVING子句結合使用。

      • 使用HAVING子句篩選這些分組行為每個部門生成一個輸出行。每個聚合結果都是針對與該部門匹配的行計算的。

        SELECT deptno, MAX(sal) FROM emp GROUP BY deptno HAVING AVG(sal) > 2000;

        返回結果如下,僅為平均工資高于2000的那些部門給出相同的結果:

         deptno |   max
        --------+---------
             10 | 5000.00
             20 | 3000.00
        (2 rows)
      • 使用WHERE子句,查詢每個部門中職位為分析師且工資最高的員工。

        SELECT deptno, MAX(sal) FROM emp WHERE job = 'ANALYST' GROUP BY deptno HAVING AVG(sal) > 2000;

        返回結果如下:

         deptno |   max
        --------+---------
             20 | 3000.00
        (1 row)

        WHERE與HAVING子句之間存在一個細微的區別。WHERE子句在執行分組和應用聚合函數之前對行進行篩選。HAVING子句在對行進行分組并為每個組計算聚合函數后對結果應用篩選條件。

        因此,在此示例中,僅考慮職位為分析師的員工。在該子集中,員工根據部門進行分組,最終結果僅包括那些組中分析師的平均工資高于2000的組。這一情況僅適用于部門20,且部門20中的分析師最高工資為3000.00。