SET集計関数は1つの単一割当て属性を取得し、その属性から(NULL以外の)すべての値のセットを構成します。
単一割当て属性は、非セット・データ型を持っています(mdex:longなど)。このため、SET関数は、1つの非セット・データ型属性を取得して、セット・データ型の結果を生成します(たとえば、mdex:long-set)。
結果のセットは、セット・データ型を持ちます(mdex:double-setなど)。そのセットで引き続き実行される演算はすべて、セットのルールに従う必要があります。
次に説明するように、SET関数は、1引数バージョンと2引数バージョンで使用できます。この関数は、SELECT句でのみ使用できます。
SET(<single-assign_attribute>)ここで、属性のデータ型は、非セット・データ型にする必要があります(単一割当てdouble属性の場合はmdex:doubleなど)。
RETURN results AS SELECT SET(Price) AS prices FROM WineState GROUP BY WineType ORDER BY WineType
WineType prices --------------------------------------------------------------- | Blanc de Noirs | { 16.99 } | | Bordeaux | { 21.99 } | | Brut | { 22.99, 23.99 } | | Chardonnay | { 17.95, 34.95 } | | Merlot | { 25.99 } | | Pinot Noir | { 14.99 } | | Red | { 12.99, 13.95, 17.5, 18.99, 21.99, 9.99 } | | White | { 20.99, 32.99, 43.99 } | | Zinfandel | { } | ---------------------------------------------------------------
結果を見ると、Zinfandelか空のセットを持っています。これは、ZinfandelにPrice属性が割り当てられていないためです。
SET集計関数の結果が極端に大きい場合は(Dgraphが過度のメモリーを消費してしまいます)、集計関数の2引数形式を指定して、セットのサイズを制限します。
SET(<single-assign_attribute>, <max-size>)ここで、
SET(Price, 3) is valid. SET(Price, x) is not valid, even if x is an integer.
RETURN results AS SELECT SET(Price, 2) AS prices FROM WineState GROUP BY WineType ORDER BY WineType
WineType prices ------------------------------------- | Blanc de Noirs | { 16.99 } | | Bordeaux | { 21.99 } | | Brut | { 22.99, 23.99 } | | Chardonnay | { 17.95, 34.95 } | | Merlot | { 25.99 } | | Pinot Noir | { 14.99 } | | Red | { 12.99, 9.99 } | | White | { 20.99, 32.99 } | | Zinfandel | { } | -------------------------------------
結果を見ると、Redセットは2つの要素を持っていますが、もともとはSETの1引数バージョンにより6つの要素を持っていました。Whiteセットに関しても同様で、もともとは3つの要素を持っていました。
SET関数を取り扱う場合は、結果のセットがセット・データ型(mdex:double-setデータ型など)になることに注意してください。
RETURN results AS SELECT SET(Price) AS prices FROM WineState GROUP BY WineType HAVING prices > 10
In statement "results": In HAVING clause: Cannot compare mdex:double-set and mdex:long
このエラーの原因は、"prices"セットの型がmdex:double-setであるにもかかわらず、数値10(mdex:double型)と比較されたことです。
RETURN results AS SELECT SET(Price) AS prices FROM WineState GROUP BY WineType HAVING SOME x IN prices SATISFIES (x > 10)
この例では、SATISFIES式により数値比較が実行されます。