Freigeben über


GROUP ON ... OVER ...-Anweisung

Die GROUP ON... ÜBER... -Anweisung gibt ein hierarchisches Rowset zurück, in dem Suchergebnisse basierend auf einer angegebenen Spalte und optionalen Gruppierungsbereichen in Gruppen unterteilt werden. Wenn Sie in der Spalte System.Kind gruppieren, wird das Resultset in mehrere Gruppen unterteilt: eine für Dokumente, eine für die Kommunikation usw. Wenn Sie nach System.Size und gruppenbereich 100 KB gruppieren, wird das Resultset in drei Gruppen unterteilt: Elemente der Größe < 100 KB, Elemente mit der Größe >= 100 KB und Elemente ohne Größenwert. Sie können Gruppierungen auch mit Funktionen aggregieren.

In diesem Thema werden die folgenden Themen behandelt:

Syntax

Die GROUP ON ... ÜBER... -Anweisung weist die folgende Syntax auf:

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

Wobei Gruppierungsbereiche wie folgt definiert werden:

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

Die GROUP ON-Spalte <> kann ein regulärer oder durch Trennzeichen getrennter Bezeichner für eine Eigenschaft im Eigenschaftenspeicher sein.

Der optionale <Gruppenbereich> ist eine Liste mit einem oder mehreren Werten (Zahl, Datum oder Zeichenfolge), die zum Aufteilen der Ergebnisse in Gruppen verwendet werden. Der <Bereichsgrenzwert> identifiziert einen Divisionspunkt im zurückgegebenen Resultset, und der

Die erste Gruppe von Ergebnissen enthält Elemente mit dem minimal möglichen Wert für die angegebene Eigenschaft bis zum ersten Bereichslimit, jedoch nicht einschließlich. Auf diese Gruppe kann mit dem MINVALUE-Schlüsselwort (keyword) verwiesen werden. Auf die zweite Gruppe kann mit dem Bereichsgrenzbezeichner selbst verwiesen werden und enthält Elemente, deren Wert für die angegebene Eigenschaft gleich oder größer ist. Alle Elemente, die keinen Wert für die angegebene Eigenschaft haben, werden zuletzt zurückgegeben und können mit dem NULL-Schlüsselwort (keyword) verwiesen werden.

Ein Bereichsgrenzwert von "2006-01-01" für die System.DateCreated-Eigenschaft unterteilt das Resultset beispielsweise in Elemente mit Datumsangaben vor dem 01.01.2006 (Gruppe MINVALUE), Elemente mit Datumsangaben am oder nach 2006-01-01 (Gruppe 2006-01-01) und Elemente ohne Datum (NULL-Gruppe ).

Innerhalb jeder Gruppe werden die Ergebnisse standardmäßig nach den Werten in der GROUP ON-Spalte sortiert. Die optionale ORDER BY-Klausel kann einen Richtungsspezifizierer von ASC für aufsteigend (niedrig bis hoch) oder DESC für absteigend (hoch bis niedrig) enthalten, und die ORDER IN GROUP BY-Klausel kann jede Gruppe mithilfe verschiedener Regeln sortieren. Weitere Informationen finden Sie weiter unten im Abschnitt Sortieren von Gruppen .

Gruppenbereiche

In der folgenden Tabelle wird veranschaulicht, wie die Ergebnisse basierend auf den Bereichsgrenzwerten in Gruppen unterteilt werden:

Beispiel (<Spalte> [Gruppenbereiche]) Ergebnis
System.Size [1000, 5000] Die Ergebnisse werden in vier Buckets gruppiert: MINVALUE: Größe < 1000
1000: 1000 <= Größe < 5000
5000: Größe >= 5000
NULL: Kein Wert für Größe
System.Author [BEFORE('m');AFTER('r')] Die Ergebnisse werden in vier Buckets gruppiert: MINVALUE: Author-Zeichen < vor "m"
m: Zeichen vor "m" <= Autorzeichen < nach "r"
r: Zeichen nach "r" <= Autor
NULL: Kein Wert für Author
System.Author [MINVALUE/'a to l',"m"/'m to z'] Die Ergebnisse werden in drei Buckets gruppiert: a bis l: Author < "m"
m bis z: "m" <= Autor
NULL: Kein Wert für Author
System.DateCreated ['2005-1-01','2006-6-01'] Die Ergebnisse werden in vier Buckets gruppiert:
MINVALUE: DateCreated < 2005-1-01
2005-1-01: 2005-1-01 <= DateCreated < 2006-6-01
2006-1-01: DateCreated >= 2006-6-01
NULL: Kein Wert für DateCreated

 

 

Wichtig

Falsche: GROUP ON System.Author['m','z','a']

Richtig: GROUP ON System.Author['a','m','z']

 

 

Bezeichnungsgruppen

Um die Lesbarkeit zu verbessern, können Sie Gruppen mit der folgenden Syntax bezeichnen:

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

Die Bezeichnung wird von der Bereichsgrenze durch einen Schrägstrich getrennt und in einfache Anführungszeichen eingeschlossen. Wenn Sie keine Bezeichnung angeben, ist der Gruppenname die Zeichenfolge für den Bereichsgrenzwert.

Im Folgenden finden Sie ein Beispiel für die Bezeichnung von Gruppen:

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

In Windows 7 oder höher können Sie auch eine generische [OTHER]-Bezeichnung verwenden, um mehrere Gruppierungsbereiche zu kombinieren. Die Ergebnisse aller Gruppen, die mit dieser Bezeichnung identifiziert werden, werden mit dieser Bezeichnung in einer Gruppe zusammengefasst. Diese Gruppe von Ergebnissen wird nach allen anderen Gruppen mit Ausnahme der NULL-Gruppe zurückgegeben. Die NULL-Gruppe enthält Ergebnisse für Elemente, die keinen Wert für die angegebene Eigenschaft haben. Vor Windows 7 wird die Bezeichnung [OTHER] wie jede andere Gruppenbezeichnung behandelt.

Der folgende Code ist ein Beispiel für die Verwendung der Bezeichnung [OTHER] für Gruppen, die in Windows 7 oder höher erstellt werden:

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

In der folgenden Tabelle sind die Gruppen aufgeführt, die mit dem vorherigen Gruppierungscode in Windows 7 oder höher erstellt werden.

Group System.Author System.FileName
0 1Bill Lorem.docx
Q Königin Ipsum.docx
Robin dolor.docx
J Zara amet.docx
[SONSTIGE] Abner nonummy.docx
Bernd laoreet.docx
Xaria magna.docx
NULL aliquam.docx

 

Sortieren von Gruppen

Es gibt drei Möglichkeiten, Elemente in Gruppen zu sortieren:

  • Standardreihenfolge: Wenn Sie nicht anders angeben, werden die Ergebnisse nach den Werten in der SPALTE GROUP ON in aufsteigender Reihenfolge sortiert.
  • ORDER BY: Sie können die absteigende Reihenfolge in einer ORDER BY-Klausel angeben. Sie müssen die Ergebnisse nach der SPALTE GROUP ON sortieren.
  • ORDER IN GROUP BY: Sie können für jede Gruppe eine andere Reihenfolge angeben. Wenn Sie auf System.Kind gruppieren, können Sie Dokumente nach System.Author und Musik von System.Music.Artist bestellen.

Weitere Informationen zu den Bestellergebnissen finden Sie auf den Referenzseiten der ORDER BY-Klausel und der ORDER IN GROUP-Klausel .

Schachteln von Gruppen

Sie können Gruppen mit mehreren GROUP ON-Klauseln verschachteln. Die in der Abfrage angegebene Reihenfolge spiegelt sich direkt in der Ausgabegruppenhierarchie wider, wie im folgenden Beispiel gezeigt.

GROUP ON <System.Kind> 
      OVER (GROUP ON <System.Author> 
                  OVER (SELECT <System.DateCreated>))
System.Kind System.Author System.DateCreated
Dokumente Willa 2006-01-02
2006-01-05
Zara 2007-06-02
2007-09-10
Kommunikation Abner 2006-04-16
Jean 2007-02-20
Willa 2006-10-15
Zara 2008-01-02

 

 

Gruppieren von Vektoreigenschaften

Beim Gruppieren von Vektoreigenschaften, eigenschaften, die einen oder mehrere Werte gleichzeitig enthalten können, werden die Vektorwerte standardmäßig einzeln verglichen. Wenn beispielsweise ein Dokument vorhanden ist, Lorem.docx, mit der System.Author-Eigenschaft als "Theresa; Zara" und ein weiteres Dokument, Ipsum.docx, mit der System.Author-Eigenschaft als "Zara", gibt die Abfrage das Resultset in zwei Gruppen zurück, wie hier gezeigt:

GROUP ON <System.Author> 
      OVER (SELECT <System.FileName>)
System.Author System.FileName
Theresa Lorem.docx
Zara Lorem.docx
  Ipsum.docx

 

Wie Sie sehen können, gibt die Gruppierung nach Vektoreigenschaften doppelte Zeilen zurück. Lorem.docx wird zweimal angezeigt, da es zwei Autoren hat.

 

Weitere Beispiele

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'))))   

Aggregatfunktionen

ORDER BY-Klausel

ORDER IN GROUP-Klausel