WebSphere Application Server Network Deployment, Version 6.1   
             オペレーティング・システム: AIX , HP-UX, Linux, Solaris, Windows, Windows Vista

             目次と検索結果のパーソナライズ化

集約関数

集約関数は、値のセットに関して動作し、単一のスカラー値を戻します。 select および subselect メソッドでこれらの関数を使用することができます。

以下に、集約の例を示します。
SELECT  SUM (e.salary) FROM EmpBean e WHERE e.dept.deptno =20

この集約では、部門 20 の給料の合計を計算します。

集約関数は、AVG、COUNT、MAX、MIN、および SUM です。 集約関数の構文を、以下の例で示します。
aggregation-function  (    [ ALL |  DISTINCT ]  expression )
または:
COUNT( [ ALL |  DISTINCT ] identification-variable )
または:
COUNT( * )

DISTINCT オプションは、関数を適用する前に重複する値を除去します。 ALL はデフォルト・オプションであり、重複の除去は行いません。 このセット内のすべてのエレメントのカウントを戻す COUNT(*) および COUNT(identification-variable) を除き、集約関数の計算ではヌル値は無視されます。

データ・ストアが Informix の場合、COUNT 関数または DISTINCT フォームの関数 SUM、AVG、MIN、 および MAX を使用する場合は、式の引数を単一値のパス式に制限する必要があります。

戻りの型の定義

集約関数を使用する select メソッドでは、 戻りの型をプリミティブ型またはラッパー型として定義することができます。 戻りの型は、データ・ストアからの戻りの型と互換性がある必要があります。 MAX および MIN 関数は、任意の数値、ストリング、または日時のデータ型に適用 可能で、対応するデータ型を戻します。 SUM および AVG 関数は、入力データとして数値型を取り、データ・ストアで使用されている型と同じ数値型を戻します。 COUNT 関数は、任意のデータ型を取ることができ、整数を戻します。

空集合に適用される場合、SUM、AVG、MAX、および MIN 関数はヌル値を戻すことがあります。 COUNT 関数は、空集合に適用されるとゼロ (0) を戻します。 戻り値が NULL になる可能性がある場合はラッパー型を使用します。そうしないと、コンテナーは ObjectNotFound 例外を表示します。

GROUP BY および HAVING の使用

集約関数に使用されるこの値のセットは、照会の FROM および WHERE 文節の結果のコレクションによって判断されます。 そのセットをグループに分割し、集約関数をそれぞれのグループに適用できます。 この操作を行うには、照会で GROUP BY 文節を使用します。 GROUP BY 文節は、パス式のリストで構成されるグループ化のメンバーを定義します。 各パス式には、プリミティブ型の byte、short、int、long、float、double、boolean、char か、 またはラッパー型の Byte、Short、Integer、Long、Float、Double、BigDecimal、String、Boolean、 Character、java.util.Calendar、java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp の各フィールドを指定します。

次の例では、各部署の平均給料を計算する照会における GROUP BY 文節の使用を示しています。

SELECT e.dept.deptno,  AVG ( e.salary) FROM EmpBean e GROUP BY e.dept.deptno

セットをグループに分割する場合、NULL 値は別の NULL 値と等しいと見なされます。

WHERE 文節が FROM 文節からのタプル (戻されたコレクション値のレコード) をフィルターに掛けるのと同様に、集約関数またはグループ化メンバーを含むグループ・プロパティーをテストする HAVING 文節を使用して、以下のようにグループをフィルターに掛けることができます。
SELECT e.dept.deptno,  AVG ( e.salary) FROM EmpBean e
GROUP BY e.dept.deptno
HAVING  COUNT(*) > 3  AND  e.dept.deptno > 5

この照会は、従業員数が 3 人より多く、部門番号が 5 より大きい部門の平均給料を戻します。

GROUP BY 文節を使用せずに HAVING 文節を使用することができます。 この場合、セット全体が HAVING 文節が適用される単一のグループとして扱われます。




関連概念
EJB 照会言語
関連タスク
EJB 照会の使用
概念トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 7:44:53 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/cque_agg.html