HAVING句には、選択されるグループが、満たさなくてはならない条件を 指定します。これはSELECTコマンドで、最も深くネストしたグループに適用 されます。また検索する各項目が、GROUP BYを指定した集計関数か、定数の いずれかでなくてはならない。
HAVING句は、ブール演算式で構成されます。ブール演算式とは、真または 偽で評価する式です。 HAVING句では、ANDとORによって、結合されたブール式を 使用できます。
HAVING句は、WHERE句と似ていますが、HAVING句は レコードではなく、グループに基づいて処理されます。よって比較の対象は、レコード のフィールド値ではなく、以下の二つのクラスのいずれかになります。
Syntax
HAVING | |(b_expr) |b_expr |b_expr OR b_expr |b_expr AND b_expr |NOT b_expr |
| | | | | |
説明
b_expr | is a boolean expression. Details on the boolean expression is described below. |
注意
|gp_expr [ | | |NULL gp_expr |
|IS |[IS] NOT |
|] gp_condition | |
| | | | |
A gp_expr is one of:
|gp_attr |string |number |gp_function |(gp_expr) |CONVERT gp_expr [TO] data_type |CONVERT gp_expr [TO] GENERIC data_type |gp_expr CONVERT TO data_type |gp_expr CONVERT [TO] GENERIC data_type |gp_expr operator gp_expr |gp_expr operator |built_in_function |user_defined_function |
| | | | | | | | | | | | | |
gp_attrは、GROUP BY句に指定するフィールド名です。 このフィールドをGROUP BY句に指定すると各グループにフィールド値が使用 されます。
gp_functionは、GROUP BY句に指定しないフィールドに対する、 集計関数です。
演算子に関しては、Expressionsを、関数に関しては、組込み関数を 参照してください。
gp_conditionは、
| | | | | |
|
| | | | | | ||||||||||||
| | | | | | |
|
| | | | | | | ||||||||||||
|[ | |
|
| | | ||||||||||||
| | |
BETWEEN gp_expr [ |
|
|
| | | ||||||||||
| | |
RANGE gp_expr [ |
|
|
| | |
RANGE TOの代わりに、BETWEEN ANDを使用することができます。 グループが条件を満たすには、値が指定の範囲にあり、昇順に指定されている必要が あります。
例
nameフィールド値の、先頭文字が"i"と"o"であるレコードを出力し ます。
SELECT name, COUNT FROM loans GROUP BY name HAVING name match '?[io]*';
以下を表示します。
name COUNT (*) Jones 3 Kilroy 1 Mosca 2
loansテーブルに、nameフィールド値が重複している レコードを表示します。
SELECT name, COUNT FROM loans GROUP BY name HAVING COUNT > 2;
以下を表示します。
name COUNT (*) Jones 3 Wladislaw 3
loansテーブルの、amountフィールドの合計が200を越す、 nameフィールドの値とカウント数を表示します。
SELECT name, SUM (amount) FROM loans GROUP BY name HAVING SUM (amount) > 200;
以下を表示します。
name SUM (amount) Jones 358.95 Kilroy 250.00 Mosca 350.00 Scarlatti 275.00
loansテーブルの、amountフィールドの平均値が、150未満 で合計値が300より大きな、nameフィールド値と平均値、合計値を表示します。
SELECT name, AVG (amount), SUM (amount) FROM loans GROUP BY name HAVING AVG (amount) < 150 AND SUM (amount) > 300;
以下を表示します。
name AVG (amount) SUM (amount) Jones 119.65 358.95