集計勾引 处男
集計では次の関数がサポートされます。
RL Languageでは、1つ以上の集計関数をfactRowCollectionに適用し、集計結果をパターン変数にバインドする集計パターンがサポートされています。时时のSQL組込み集計関数がサポートされており、ユーザー指定のJavaクラスが提供されている場合はユーザー定義の集計関数がサポートされます。
集計関数でプリミティブ型のラッパー型(Long、Doubleなど)を使用する場合、それらのラッパー型は、結果のバインド変数に適切なRAWプリミティブ型が設定されるように変換されます勾引 处男。
集計関数のファクト式が空の場合、ルールは起動されません。したがって、式に対する一致ファクトがない場合は、集計関数では、そのコンテキスト内で意味を合手たない数値は戻されません。たとえば、サイズがゼロ(0)に設定されたプロパティを合計しても意味がありません。
たとえば、平均より高い給与が支払われている従業員の名前を出力します。
在线看三级片if fact Emp emp && aggregate fact Emp(salary: var sal) : average(sal) var avgSal && emp.salary > avgSal { println(emp.name); }
給与が$100,000を超える従業員の平均給与より高い給与が支払われている従業員の名前を出力します。
if fact Emp emp && aggregate fact Emp(salary: var sal) && Emp.salary > 100000 : average(sal) var avgSal && emp.salary > avgSal { println(emp.name); }
ユーザー定義の集計関数をサポートするには、次の骨子を実装した、引数のないパブリック・コンストラクタを合手つuser-definedという名前のパブリック・クラスを宅心します。
public interface IncrementalAggregate<Tin, Tout> extends Serializable { public void initialize(); public void add(Tin value); public void remove(Tin value); public Tout getResult(); public boolean isValid(); }
実装では次の起動順序をサポートする必要があります。
new (initialize (add|remove)+ isValid getResult)*
isValidでは、ユーザー定義の集計の結果が有効のときはtrue、無効のときはfalseが戻される必要があります勾引 处男。