GROUP ON ... OVER ... ステートメント

The GROUP ON...OVER...ステートメントは、指定された列とオプションのグループ化範囲に基づいて検索結果がグループに分割される階層行セットを返します。 System.Kind 列でグループ化すると、結果セットは複数のグループ (ドキュメント用、通信用など) に分割されます。 System.Size でグループ化し、100 KB の範囲をグループ化すると、結果セットは、サイズ 100 KB の項目、サイズ < = 100 KB の項目、およびサイズ>値のない項目の 3 つのグループに分けられます。 関数を使用してグループ化を集計することもできます。

このトピックでは、次のテーマについて説明します。

構文

GROUP ON ...OVER ...ステートメントには、次の構文があります。

GROUP ON <column> ['['<group ranges>']']] 
[AGGREGATE <aggregate_function>] 
[ORDER BY <column> [<direction>]] | [ORDER IN GROUP '<group name>' BY <column> [<direction>]]
    OVER (GROUP ON... | SELECT... ] )

グループ化範囲は次のように定義されます。

<group ranges> := <range limit> [/'<label>'] | <range limit> [/'<label>'], <group ranges>
<range limit> := (<number> | <date> | '<string>' | BEFORE('<string>') | AFTER('<string>')) 

GROUP ON <列> には、プロパティ ストア内のプロパティの通常の識別子または区切られた 識別子 を指定できます。

オプション <のグループ範囲> は、結果をグループに分割するために使用される 1 つ以上の値 (数値、日付、または文字列) の一覧です。 範囲の制限>は<、返された結果セット内の除算ポイントを識別し

結果の最初のグループには、指定したプロパティに対して可能な最小値を持つ項目が含まれますが、最初の範囲の制限は含まれません。 このグループは、MINVALUE キーワード (keyword)で参照できます。 2 番目のグループは、範囲制限指定子自体で参照でき、指定されたプロパティの値が範囲の制限以上の項目を含みます。 指定したプロパティの値を持たない項目はすべて最後に返され、NULL キーワード (keyword)で参照できます。

たとえば、 System.DateCreated プロパティの範囲制限 '2006-01-01' は、結果セットを 2006-01-01 より前の日付 (MINVALUE グループ)、日付が 2006-01-01 (2006-01-01 グループ) 以降のアイテム、および日付のないアイテム (NULL グループ) に分割されます。

各グループ内では、既定で GROUP ON 列の値で結果が並べ替えられます。 オプションの ORDER BY 句には、昇順 (低から高) の場合は ASC、降順の場合は DESC (高から低) の方向指定子を含めることができます。 ORDER IN GROUP BY 句は、異なるルールを使用して各グループを並べ替えることができます。 詳細については、以下の 「グループの順序付け 」セクションを参照してください。

グループ範囲

次の表は、範囲の制限に基づいて結果をグループに分割する方法を示しています。

例 (<列> [グループ範囲]) 結果
System.Size [1000, 5000] 結果は、 MINVALUE: Size < 1000 の 4 つのバケットにグループ化されます
1000: 1000 <= サイズ < 5000
5000: Size >= 5000
Null: [サイズ] の値なし
System.Author [BEFORE('m'),AFTER('r')] 結果は 4 つのバケットにグループ化されます。 MINVALUE:< Author character before "m"
m: "m" の前の文字 = "r" <の後の Author < 文字
r: "r" = Author の <後の文字
Null: Author の値なし
System.Author [MINVALUE/'a to l',"m"/'m to z'] 結果は、次の 3 つのバケットにグループ化されます: a から l: Author < "m"
m から z: "m" <= Author
Null: Author の値なし
System.DateCreated ['2005-1-01','2006-6-01'] 結果は 4 つのバケットにグループ化されます。
Minvalue: DateCreated < 2005-1-01
2005-1-01: 2005-1-01 <= DateCreated < 2006-6-01
2006-1-01: DateCreated >= 2006-6-01
Null: DateCreated の値なし

 

 

重要

誤った: GROUP ON System.Author['m','z','a']

そうです: GROUP ON System.Author['a','m','z']

 

 

グループのラベル付け

読みやすくするために、次の構文を使用してグループにラベルを付けることができます。

GROUP ON <column> [<range limit>/'<label>',<range limit>/'<label>']

ラベルは範囲制限からスラッシュで区切られ、単一引用符で囲まれます。 ラベルを指定しない場合、グループ名は範囲制限文字列です。

ラベル付けグループの例を次に示します。

GROUP ON System.Size [(MINVALUE/'Small','100')/'Medium','50000'/'Large']
    OVER (SELECT System.Size FROM SystemIndex)

Windows 7 以降では、汎用の [OTHER] ラベルを使用して、複数のグループ化範囲を結合することもできます。 このラベルで識別されたすべてのグループの結果は、このラベルを持つ 1 つのグループに結合されます。 この結果のグループは、 NULL グループを除く他のすべてのグループの後に返されます。 NULL グループには、指定したプロパティの値を持たないアイテムの結果が含まれます。 Windows 7 より前では、[OTHER] ラベルは他のグループ ラベルと同様に扱われます。

次のコードは、Windows 7 以降で作成されるグループに [OTHER] ラベルを使用する例です。

GROUP ON System.Author ['0', 'A'/'[OTHER]', 'I', 'Q', 'W'/'[OTHER]', 'Y']
    OVER (SELECT System.DateCreated FROM SystemIndex)

次の表は、Windows 7 以降の前のグループ化コードによって作成されるグループを示しています。

グループ System.Author System.FileName
0 1Bill Lorem.docx
Q 女王 Ipsum.docx
Robin dolor.docx
Y ザラ amet.docx
[その他] アブナー nonummy.docx
Bob laoreet.docx
Xaria magna.docx
NULL aliquam.docx

 

グループの順序付け

グループ内のアイテムを並べ替える方法は 3 つあります。

  • 既定の順序付け: 指定しない場合、結果は GROUP ON 列の値によって昇順に並べ替えられます。
  • ORDER BY: ORDER BY 句で降順を指定できます。 結果は GROUP ON 列で並べ替えする必要があります。
  • ORDER IN GROUP BY: グループごとに異なる順序を指定できます。 System.Kind でグループ化する場合は、System.Author でドキュメントを注文し、System.Music.Artist によって音楽を注文できます。

結果の順序付けの詳細については、 ORDER BY 句ORDER IN GROUP 句 のリファレンス ページを参照してください。

グループの入れ子

複数の GROUP ON 句を使用してグループを入れ子にすることができます。 次の例に示すように、クエリで指定された順序は出力グループ階層に直接反映されます。

GROUP ON <System.Kind> 
      OVER (GROUP ON <System.Author> 
                  OVER (SELECT <System.DateCreated>))
System.Kind System.Author System.DateCreated
ドキュメント ウィラ 2006-01-02
2006-01-05
ザラ 2007-06-02
2007-09-10
communications アブナー 2006-04-16
ジャン 2007-02-20
ウィラ 2006-10-15
ザラ 2008-01-02

 

 

ベクター プロパティでのグループ化

1 つ以上の値を同時に含めることができるプロパティであるベクター プロパティでのグループ化では、既定でベクター値が個別に比較されます。 たとえば、1 つのドキュメントがある場合、Lorem.docx System.Author プロパティが "Theresa;Zara" と別のドキュメントIpsum.docx、System.Author プロパティが "Zara" の場合、クエリは次に示すように 2 つのグループで結果セットを返します。

GROUP ON <System.Author> 
      OVER (SELECT <System.FileName>)
System.Author System.FileName
テレサ Lorem.docx
ザラ Lorem.docx
  Ipsum.docx

 

ご覧のように、ベクター プロパティでグループ化すると、重複する行が返されます。 Lorem.docxには 2 人の著者が含まれているため、2 回表示されます。

 

その他の例

GROUP ON System.Photo.ISOSpeed [0,10,100] 
      OVER (SELECT System.ItemName, System.Size, System.ItemUrl FROM SystemIndex)
            
GROUP ON System.DateCreated['2005/01/01 00:00:00', '2005/12/30 23:00:00'] 
      OVER (SELECT System.ItemName, System.Size, System.ItemUrl FROM SystemIndex)
            
GROUP ON System.Author ORDER BY System.Author DESC 
      OVER (GROUP ON System.DateCreated ORDER BY System.DateCreated ASC 
                  OVER (SELECT System.FileName, System.DateCreated, System.Size FROM SystemIndex 
                        WHERE CONTAINS(*, 'text')))

GROUP ON System.ItemName [before('a'), 'a', before ('c'), 'd', after('d')] 
      OVER (SELECT System.ItemName, System.ItemUrl FROM SystemIndex ORDER BY System.ItemName)                        
                        
GROUP ON System.ItemNameDisplay ['a' / 'col_a','c' / 'col_c'] 
      OVER (SELECT System.ItemNameDisplay FROM SystemIndex 
            ORDER BY System.ItemNameDisplay)

GROUP ON System.Size[1,2] 
      OVER (GROUP ON System.Author['a','f','mc','x'] 
                  OVER (GROUP ON System.DateCreated['2005/07/25 07:00:00', '2005/08/25 07:00:00']
                        ORDER BY System.DateCreated DESC 
                              OVER (SELECT System.FileName FROM SystemIndex 
                                    WHERE CONTAINS('text'))))   

集計関数

ORDER BY 句

ORDER IN GROUP 句