集計関数の使用

組込み集計関数を使用して、カウント、合計、平均、最小、最大などの情報を確認できます。

次の関数は、セマンティクスが標準SQLのものと似ているため、SQL集計関数と呼ばれます。これらの関数はグループ化と連携して機能し、グループの行全体の値を集計します。

  • long count(*)
  • long count(any*)
  • number sum(any*)
  • number avg(any*)
  • any_atomic min(any*)
  • any_atomic max(any*)

long count(*)

count star関数は、グループ内の行数を返します。

long count(any*)

count関数は、グループの各行の入力式を計算し、入力式のこれらの評価によって返されたNULL以外の値をすべてカウントします。

number sum(any*)

sum関数は、グループの各行の入力式を計算し、入力式のこれらの評価によって返されたすべての数値を合計します。数値以外の値はスキップされます。ただし、コンパイル時に、入力式が数値を返さないと判断できる場合は、エラーがスローされます。結果の値は、入力項目の型に応じて、long、doubleまたはnumber型になります。number型の入力項目が少なくとも1つ存在する場合、結果はnumberになります。それ以外の場合、doubleまたはfloat型の項目が少なくとも1つ存在すると、結果はdoubleになり、それ以外の場合、結果はlongになります。最後に、sumの入力によって数値が返されない場合、結果はNULLになります。

number avg(any*)

avg (平均)関数は、グループの各行の入力式を計算し、入力式のこれらの評価によって返されたすべての数値を合計およびカウントします。数値以外の値はスキップされます。ただし、コンパイル時に、入力式が数値を返さないと判断できる場合は、エラーがスローされます。結果の値は、合計をカウントで除算した値です。この値は、入力項目の型に応じて、doubleまたはnumber型になります。number型の入力項目が少なくとも1つ存在する場合、結果はnumberになります。それ以外の場合、結果はdoubleになります。最後に、avgの入力によって数値が返されない場合、結果はNULLになります。

any_atomic min(any*)

min関数は、グループの各行の入力式の評価によって返されるすべての値の中で最小値を返します。より具体的には、コンパイル時に、入力式によって返される値が、順序比較が定義されていない型(つまり、RECORD、MAP、BINARYまたはFIXED_BINARY)に属していると判断できる場合は、エラーがスローされます。それ以外の場合、各グループの最小値はNULLに初期化されます。次に、Mを現在の最小値、Nを次の入力値とします。MがNULLの場合、MはNに設定されます。ただし、Nがjson nullであるか、または順序比較が定義されていない型がある場合、Nはスキップされます。それ以外の場合、NがNULLまたはjson nullであるか、MとNが(値比較演算子の項の値比較演算子のルールに従って)比較できない場合、Nはスキップされます。最後に、NがMより小さい場合、MはNに設定されます。これらのルールに従って、グループ内のすべての入力値がRECORD、MAP、BINARYまたはFIXED_BINARY型の場合、min関数はNULLを返します。

any_atomic max(any*)

max関数は、グループの各行の入力式の評価によって返されるすべての順序の最大値を返します。具体的なルールはmin関数と同じですが、Nがスキップされず、Mより大きい場合、現在の最大値Mが次の入力値Nで置換されます。

例6-5 集計関数

CREATE INDEX idx11 ON users (age);

SELECT 
age, count(*) AS count, avg(income) AS income 
FROM users 
GROUP BY age;

前述の問合せは、ユーザーを年齢別にグループ化し、年齢ごとに、その年齢のユーザーの数と平均収入を返します。