Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データのクエリと変更 » クエリ結果の要約、グループ化、ソート » GROUP BY 句:クエリ結果のグループへの編成

 

GROUP BY のあるクエリを実行する方法

この項では、式や例で GROUP BY 句のサブ句 ROLLUP を使用します。ROLLUP 句の詳細については、GROUPING SETS のショートカットとしての ROLLUP と CUBE の使用を参照してください。

次のような形式の単一テーブルのクエリを考えてみます。

SELECT select-list
   FROM table
   WHERE where-search-condition
   GROUP BY [ group-by-expression | ROLLUP (group-by-expression) ]
   HAVING having-search-condition

このクエリは、次のように実行します。

  1. 「WHERE 句を適用する」

    テーブルのローの一部だけで構成される中間結果が生成されます。

    中間結果には、テーブルのローのサブセットが含まれます。
  2. 「結果をグループに分割する」

    GROUP BY 句の指示どおりに、各グループに対してローが 1 つある中間結果が生成されます。生成された各ローには、グループごとの group-by-expression と、select-list および having-search-condition の集合関数の計算結果が含まれます。

    第 2 の中間結果は、GROUP BY 句の適用により小さくなります。
  3. 「ROLLUP 演算があれば適用する」

    ROLLUP 演算の一部として計算された小計ローが、結果セットに追加されます。

  4. 「HAVING 句を適用する」

    第 2 の中間結果で HAVING 句の基準に満たないローは、この時点で削除されます。

  5. 「プロジェクトの結果を表示する」

    クエリの結果セットに表示する必要のあるカラムだけが手順 3 から取り出されます。つまり、select-list にある式に対応するカラムだけが取り出されます。

    最終結果セットは、第 2 の中間結果セットの射影です。

このプロセスでは、GROUP BY 句のあるクエリについて、いくつかの要件が作成されます。

  • WHERE 句が最初に評価される。したがって、どの集合関数も、WHERE 句を満たすローについてのみ評価されます。

  • 最終結果セットは、分割されたローを保持している第 2 の中間結果から構築される。第 2 の中間結果は、group-by-expression に一致するローを保持しています。したがって、集合関数ではない式が select-list にある場合、同様に group-by-expression にもその式がなければなりません。プロジェクションの段階では関数の評価は行われません。

  • group-by-expression にある式を、select-list に含まないことも可能です。その式は、結果にプロジェクションされます。