すべてのプロダクト
Search
ドキュメントセンター

PolarDB:集計関数

最終更新日:Sep 29, 2024

他のほとんどのリレーショナルデータベースサービスと同様に、PolarDB for PostgreSQL (Compatible with 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句を使用して、これらのグループ化された行をフィルタリングし、部門ごとに1つの出力行を生成します。 各集計結果は、その部門に一致する行に対して計算されます。

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

        次の結果が返されます。 同じ結果は、平均給与が2000を超える部門に対してのみ返されます。

      • 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 です。