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
- Gruppenbereiche
- Bezeichnungsgruppen
- Sortieren von Gruppen
- Schachteln von Gruppen
- Gruppieren von Vektoreigenschaften
- Weitere Beispiele
- Zugehörige Themen
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'))))
Zugehörige Themen