SET_INTERSECTIONS関数

SET_INTERSECTIONS集計関数は1つの複数割当て属性を取得し、その属性からすべての値の共通部分であるセットを構成します。

SET_INTERSECTIONS関数の構文は次のとおりです。
SET_INTERSECTIONS(<multi-assign_attribute>)
ここで、属性のデータ型は、セット・データ型にする必要があります(複数割当て文字列属性の場合はmdex:string-setなど)。

この関数は、SELECT句でのみ使用できます。

SET_INTERSECTIONSの例

この例では、Bodyは複数割当ての文字列属性です。
RETURN results AS
SELECT SET_INTERSECTIONS(Body) AS bodyIntersection
FROM WineState
GROUP BY WineType
ORDER BY WineType
この文の結果は次のようになります。
WineType        bodyIntersection
------------------------------------
| Bordeaux   | { Silky, Tannins }  |
| Brut       | { Robust }          |
| Chardonnay | { }                 |
| Merlot     | { }                 |
| Pinot Noir | { Supple }          |
| Red        | { }                 |
| White      | { }                 |
| Zinfandel  | { Robust, Tannins } |
------------------------------------
セットは次のようにして導出されます。
  • Bordeaux: 3つのレコードに割り当てられており、各レコードに"Silky"と"Tannins"の2つのBodyが割り当てられています。このため、3つのレコード間には共通部分が存在し、2要素のセットが返されます。
  • Brut: 2つのレコードに割り当てられており、各レコードに"Robust"のBodyが割り当てられています。このため、2つのレコード間には共通部分が存在し、1要素のセットが返されます。
  • Chardonnay: 2つのレコードに割り当てられていますが、いずれのレコードにもBodyは割り当てられていません。このため、2つのレコード間には共通部分が存在せず(比較する値が存在しないため)、空のセットが返されます。
  • Merlot: 2つのレコードに割り当てられており、1つのレコードには"Fruity"のBodyが割り当てられていますが、もう1つのレコードにはBodyは割り当てられていません。このため、2つのレコード間には共通部分が存在せず、空のセットが返されます。
  • Pinot Noir: 1つのレコードのみに割り当てられており、"Supple"のBodyが割り当てられています。このため、そのレコードには1つの共通部分が存在します。
  • Red: 8つのレコードに割り当てられており、6つのレコードには"Silky"と"Tannins"の2つのBodyが、1つのレコードには"Robust"と"Tannins"の2つのBodyが、最後のレコードには"Robust"のBodyが割り当てられています。このため、8つのレコード間には共通部分が存在せず、空のセットが返されます。
  • White: 4つのレコードに割り当てられており、最初のレコードには"Fresh"と"Robust"の2つのBodyが、2番目のレコードには"Firm"と"Robust"の2つのBodyが割り当てられていますが、3番目と4番目のレコードにはBodyは割り当てられていません。このため、4つのレコード間には共通部分が存在せず、空のセットが返されます。
  • Zinfandel: 1つのレコードのみに割り当てられており、そのレコードに"Robust"と"Tannins"の2つのBodyが割り当てられています。このため、そのレコードには1つの共通部分が存在し、2要素のセットが返されます。