PSQL Programmer's Guide (v11)

関数 (リレーショナル インターフェイス)

一度データベースにデータを取り込むと、データに対して関数(集計関数)を使用して、列値のセットに結果を返すことができます。または、1 つまたは複数のパラメーターを入力として受け入れ、スカラー関数を使用して、1 つの値を返すことができます。

集計関数

集計関数は、一連の列の値に対する 1 つの結果を返す関数です。Pervasive PSQL では、表 46 に示す集計関数が使用できます。

表 46 集計関数
機能
説明
AVG
値のグループの平均を算定します。オペランドが DECIMAL でない場合、AVG は 8 バイトの FLOAT を返します。オペランドが DECIMAL である場合、AVG は 10 バイトの DECIMAL を返します。
COUNT
指定されたグループ内の行数をカウントします。COUNT は常に、4 バイトの INTEGER を返します。
DISTINCT
DISTINCT キーワードは SELECT ステートメントで使用して、結果から重複する値を削除するよう Pervasive PSQL に指示します。DISTINCT を使用すると、SELECT ステートメントの条件を満たす一意の行をすべて検索できます。
MAX
値のグループの最大値を返します。MAX は、オペランドと同じデータ型とサイズを返します。
MIN
値のグループの最小値を返します。MIN は、オペランドと同じデータ型とサイズを返します。
SUM
値のグループの合計を算定します。オペランドが DECIMAL でない場合、SUM は 8 バイトの FLOAT を返します。オペランドが DECIMAL である場合、SUM は 10 バイトの DECIMAL を返します。

これらの各関数の詳細については、『SQL Engine Reference』を参照してください。

集合関数への引数

AVG 関数と SUM 関数の場合、関数への引数は数値列名でなければなりません。COUNT 関数、MIN 関数および MAX 関数は、数値列または非数値列に結果を示すことができます。

集計関数の参照をネストすることはできません。たとえば、以下の参照は無効です。

SUM(AVG(Cost_Per_Credit)) 

以下の例に示すように、式で集計関数を使用できます。

AVG(Cost_Per_Credit) + 20 

グループ集計関数への引数として式を使用することもできます。たとえば、以下の式は有効です。

AVG(Cost_Per_Credit + 20) 

集計関数は、ヌル列の値を有効値として扱います。たとえば、40 行のデータと 5 行のヌル値を含むテーブルで、COUNT 関数は 45 を返します。

DISTINCT キーワードを使用して、Pervasive PSQL がすべてのヌル列の値を 1 つの値として扱うようにすることができます。以下の例では、Grade 列で列の平均値を計算します。

AVG(DISTINCT Grade) 

DISTINCT キーワードは、AVG 関数、COUNT 関数および SUM 関数に影響を与えます。このキーワードは、MIN 関数と MAX 関数に影響を与えません。

集計関数の規則

以下のように、SELECT ステートメントで集計関数を使用できます。

一般に、GROUP BY 句を含む SELECT ステートメントで集計関数を使用して、ある行のグループの集計値を算定します。ただし、SELECT ステートメントに GROUP BY 句が含まれておらず、その句で集計関数を使用したい場合、選択リストのすべての項目は集計関数でなければなりません。

SELECT ステートメントに GROUP BY 句が含まれている場合、GROUP BY 句に指定する列は、集計関数でなく単一の列である選択項目でなければなりません。ただし、GROUP BY 句にも示されていない選択項目はすべて集計関数でなければなりません。

以下の例では、各学生が支払った金額を決定できる結果テーブルを返します。

SELECT Student_ID, SUM(Amount_Paid)
   FROM Billing
   GROUP BY Student_ID; 

GROUP BY 句で使用される HAVING 句に集計関数を組み込むこともできます。GROUP BY 句を持つ HAVING 句を使用すると、Pervasive PSQL から返される行のグループが制限されます。Pervasive PSQL は GROUP BY 句で指定された各行グループの列に対して集計関数を実行し、グループ化列の値が等しい行セットごとに 1 つの結果を返します。

以下の例では、Pervasive PSQL は 15 時間を超える履修単位時間で現在受講登録されている学生についてのみ行グループを返します。

SELECT Student_ID, SUM(Credit_Hours)
   FROM Enrolls e, Class cl, Course c
   WHERE e.Class_ID = cl.ID AND cl.Name = c.Name
   GROUP BY Student_ID
   HAVING SUM(Credit_Hours) > 15; 

スカラー関数

CONCAT や CURDATE のようなスカラー関数は、1 つまたは複数のパラメーターを入力として受け入れ、1 つの値を返します。たとえば、LENGTH 関数は文字列の列の値の長さを返します。式で計算列を使用できる Pervasive PSQL ステートメントでスカラー関数を使用できます。

使用できる式演算子のタイプは、関数が返す結果のタイプにより異なります。たとえば、関数が数値を返す場合、算術演算子を使用できます。関数が文字列を返す場合、文字列演算子を使用できます。

スカラー関数をネストできますが、以下の例に示すように、ネストされた各関数は次のレベルのスカラー関数へ対応するパラメーターとしての結果を返します。

SELECT RIGHT (LEFT (Last_Name, 3), 1)
   FROM Person; 

Pervasive PSQL はまず、LEFT 関数を実行します。Last Name 列の値が Baldwin である場合、LEFT 関数から生ずる文字列は Bal です。この文字列は RIGHT 関数のパラメーターで、この関数は文字列の右端の文字として「l」を返します。

数値を計算する計算列の中に数値結果を返すスカラー関数を使用できます。文字列値を式として別の文字列関数へ返すスカラー関数も使用できますが、文字列の結果の合計長は 255 バイト以内でなければなりません。

Pervasive PSQL で使用できるスカラー関数の詳細については、『SQL Engine Reference』でビット演算子を参照してください。


制限句 (リレーショナル インターフェイス)

ロジックの格納