ARB

ARBでは、特定のフィールドの値のセットから値を1つ選択します。選択される値は不定ですが一定です。

ARB関数の構文は次のとおりです。
ARB(<attribute>)
ここで、attributeは、単一割当て属性またはセット(複数割当て属性)です。
ARBは次のように動作します。
  • 単一割当て属性の場合、ARBは最初にNULL値をすべて破棄してから、残りのNULL以外の値から不定ではあるが一定の値を選択します。属性がNULL以外の値を持たない場合は、NULLが返されます。
  • 複数割当て属性の場合、ARBは、グループ内のすべての行を調べ(空のセットを持つ行を含む)、いずれかの行からセット値を選択します。つまり、空のセットと空ではないセットは同等に扱われます。選択する値が不定であるため、返されるセット値が空のセットである場合があります。ARBの戻り型は引数の型と同じです。属性xがmdex:long-setの場合はARB(x)となります。属性がNULL以外の値を持たない場合は、空のセットが返されます。

ARBの例

単一割当ての例: Priceは単一割当て属性です。
RETURN results AS
SELECT ARB(Price) AS prices
FROM WineState
GROUP BY WineType
ORDER BY WineType
この例の結果は次のようになります。
WineType           prices
--------------------------
| Blanc de Noirs | 16.99 |
| Bordeaux:      | 21.99 |
| Brut           | 22.99 |
| Chardonnay:    | 17.95 |
| Merlot:        | 25.99 |
| Pinot Noir:    | 14.99 |
| Red:           | 9.99  |
| White:         | 20.99 |
| Zinfandel:     |       |
--------------------------
このデータ・セットの結果値で興味深い点は次のとおりです。
  • 3つのBordeauxレコードがあります。1つはPriceの割当てが21.99で、残りの2つはPriceが割り当てられていません。このため、Bordeaux値に対して、ARBは2つのNULL値を破棄し、値21.99を返しています。
  • Zinfandelレコードが1つあり、Priceは割り当てられていません。このため、NULL値が返されます。
複数割当ての例: Bodyは複数割当て属性です。
RETURN results AS
SELECT ARB(Body) AS bodies
FROM WineState
GROUP BY WineType
ORDER BY WineType
この例の結果は次のようになります。
WineType             bodies
----------------------------------------
| Blanc de Noirs | { Firm, Robust }    |
| Bordeaux:      | { Silky, Tannins }  |
| Brut           | { Robust }          |
| Chardonnay:    | { }                 |
| Merlot:        | { }                 |
| Pinot Noir:    | { Supple }          |
| Red:           | { Silky, Tannins }  |
| White:         | { }                 |
| Zinfandel:     | { Robust, Tannins } |
----------------------------------------
この属性の結果で興味深い点は次のとおりです。
  • 9つのRedレコードにはすべて最低1つのBodyが割り当てられています。Redに対して返された値は{Silky, Tannins}ですが、返される値は不定であるため、値が他の8つのセットのいずれかになる場合があります。
  • 2つのWhiteレコードにはBodyが割り当てられていますが(このため、空のセットではありません)、他の2つのレコードにはBodyが割り当てられていません(このため、空のセットになります)。Whiteの空のセットのいずれかが不定として返されますが、空ではないセットのいずれかになるのが適当であると考えられます。
  • 2つのChardonnayレコードにはいずれもBodyが割り当てられていないため、このグループに対しては空のセットが返されています。