セットによるグルーピング

EQLでは、セットによるグルーピングがサポートされています。

GROUP BYの使用

GROUP BY句の標準のグルーピング構文では、EQLはセットの等価性によりグルーピングを行います(つまり、セットが等価である行は同じグループに配置されます)。

たとえば、Bodyが複数割当て属性であるデータ・セットがあり、それぞれのレコードに最低1つのBodyが割り当てられているとします(ただし、レコード1、2、17、20および21を除く)。このようなデータ・セットに対して次の問合せを実行します。
RETURN results AS
  SELECT
    SET(WineID) AS IDs
  GROUP BY Body
この文の結果は次のようになります。
Body                      IDs
------------------------------------------------------------
| { Silky, Tannins }  | { 10, 12, 13, 16, 18, 3, 5, 7, 9 } |
| { Robust }          | { 23, 24, 6, 8 }                   |
| { Robust, Tannins } | { 11, 4 }                          |
| { Firm, Robust }    | { 22, 25 }                         |
| { Fresh, Robust }   | { 19 }                             |
| { Supple }          | { 14, 15 }                         |
------------------------------------------------------------

GROUP BYを使用する際に、NULL値と空のセットをコーパスから選択するとそれらは無視されることに注意してください(この問合せのケースです)。このため、レコード1、2、17、20および21は、Bodyが割り当てられていないため返されません(これらのレコードに対しては空のセットが返されます)。

GROUP BY句の詳細は、「GROUP BYの指定」を参照してください。

GROUP BY MEMBERSの使用

GROUP BYに対してMEMBERSを拡張すると、セットのメンバーによるグルーピングを使用できます。MEMBERSの使用について示すために、前の例を書き換えます。
RETURN results AS
  SELECT
    SET(WineID) AS IDs
  GROUP BY MEMBERS(Body) AS BodyType
結果は次のようになります。
BodyType      IDs
-------------------------------------------------------
| Fresh   | { 19 }                                    |
| Firm    | { 22, 25 }                                |
| Supple  | { 14, 15 }                                |
| Robust  | { 11, 19, 22, 23, 24, 25, 4, 6, 8 }       |
| Tannins | { 10, 11, 12, 13, 16, 18, 3, 4, 5, 7, 9 } |
| Silky   | { 10, 12, 13, 16, 18, 3, 5, 7, 9 }        |
-------------------------------------------------------

前の例の場合と同様に、レコード1、2、17、20および21は、Body属性が空のセットであるため返されません。

MEMBERSの詳細は、「MEMBERS拡張」を参照してください。