GROUP ON ... ÜBER... 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 nach der Spalte System.Kind gruppieren, wird das Ergebnisset in mehrere Gruppen unterteilt: eine für Dokumente, eine für die Kommunikation und so weiter. Wenn Sie system.size und den Gruppenbereich 100 KB gruppiert haben, wird das Ergebnisset in drei Gruppen unterteilt: Elemente der Größe < 100 KB, Elemente der Größe >= 100 KB und Elemente ohne Größenwert. Sie können Auch Gruppierungen mit Funktionen aggregieren.
In diesem Thema werden die folgenden Themen behandelt:
- Syntax
- Gruppenbereiche
- Bezeichnungsgruppen
- Reihenfolge von Gruppen
- Schachteln von Gruppen
- Gruppieren nach Vektoreigenschaften
- Weitere Beispiele
- Zugehörige Themen
Syntax
Die GROUP ON ... ÜBER... -Anweisung hat die folgende Syntax:
GROUP ON <column> ['['<group ranges>']']]
[AGGREGATE <aggregate_function>]
[ORDER BY <column> [<direction>]] | [ORDER IN GROUP '<group name>' BY <column> [<direction>]]
OVER (GROUP ON... | SELECT... ] )
Dabei werden Gruppierungsbereiche wie folgt definiert:
<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.
Optional ist eine Liste mit einem oder mehreren Werten (Zahl, Datum oder Zeichenfolge), die zum Aufteilen der Ergebnisse in Gruppen verwendet werden. Identifiziert einen Divisionspunkt im zurückgegebenen Resultset, und identifiziert eine
Die erste Gruppe von Ergebnissen enthält Elemente mit dem minimal möglichen Wert für die angegebene Eigenschaft bis einschließlich des grenzwerts für den ersten Bereich. Auf diese Gruppe kann mit dem MINVALUE-Schlüsselwort verwiesen werden. Auf die zweite Gruppe kann mit dem Bereichsbegrenzungsspezifizierer selbst verwiesen werden und enthält Elemente, deren Wert für die angegebene Eigenschaft gleich oder größer als der Bereichsgrenzwert ist. Alle Elemente, die keinen Wert für die angegebene Eigenschaft haben, werden zuletzt zurückgegeben und können mit dem NULL-Schlüsselwort darauf verwiesen werden.
Ein Bereichslimit von "2006-01-01" für die System.DateCreated-Eigenschaft unterteilt das Ergebnisset beispielsweise in Elemente mit Datumsangaben vor dem 01.01.2006 (MINVALUE-Gruppe), Elementen mit Datumsangaben am oder nach dem 01.01.2006 (Gruppe 2006-01-01) und Elementen 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 mit unterschiedlichen Regeln reihenfolgen. Weitere Informationen finden Sie weiter unten im Abschnitt Bestellgruppen.
Gruppenbereiche
In der folgenden Tabelle wird veranschaulicht, wie Die Ergebnisse basierend auf den Bereichsgrenzwerten in Gruppen unterteilt werden:
| Beispiel ( < > [ Spaltengruppenbereiche ] ) | Ergebnis |
|---|---|
| System.Size [ 1000, 5000] | Die Ergebnisse werden in vier Buckets eingekreist: MINVALUE: < 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 eingekreist: MINVALUE: Author < character before "m" m: Zeichen vor "m" <= < Zeichen nach "r" erstellen r: Zeichen nach "r" <= Author NULL: Kein Wert für Autor |
| System.Author [ MINVALUE/'a to l',"m"/'m to z'] | Die Ergebnisse werden in drei Buckets eingekreist: a bis l: Author < "m" m bis z: "m" <= Author NULL: Kein Wert für Autor |
| System.DateCreated [ '2005-1-01','2006-6-01'] | Die Ergebnisse werden in vier Buckets eingekreist: MINVALUE: DateCreated < 01.05.2005 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 beschriften:
GROUP ON <column> [<range limit>/'<label>',<range limit>/'<label>']
Die Bezeichnung ist durch einen Schrägstrich vom Bereichsgrenzwert getrennt und in einfache Anführungszeichen eingeschlossen. Wenn Sie keine Bezeichnung angeben, ist der Gruppenname die Bereichsbegrenzungszeichenfolge.
Im Folgenden finden Sie ein Beispiel für Bezeichnungsgruppen:
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. Ergebnisse aus allen Gruppen, die mit dieser Bezeichnung identifiziert werden, werden in einer Gruppe mit dieser Bezeichnung kombiniert. 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 durch den vorangehenden 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 |
| [ANDERE] | Abner | nonummy.docx |
| Bob | laoreet.docx | |
| Xaria | magna.docx | |
| NULL | aliquam.docx |
Reihenfolge von Gruppen
Es gibt drei Möglichkeiten, Elemente in Gruppen zu bestellen:
- Standard reihenfolge: Wenn Sie andernfalls nicht angeben, werden die Ergebnisse nach den Werten in der GROUP ON -Spalte in aufsteigender Reihenfolge geordnet.
- ORDER BY: Sie können eine absteigende Reihenfolge in einer ORDER BY-Klausel angeben. Sie müssen die Ergebnisse nach der GROUP ON-Spalte sortieren.
- ORDER IN GROUP BY: Sie können für jede Gruppe eine andere Reihenfolge angeben. Wenn Sie nach System.Kindgruppieren, können Sie Dokumente nach System.Author und music nach System.Musik. Interpret.
Weitere Informationen zum Reihenfolgen von Ergebnissen finden Sie auf den Referenzseiten zur ORDER BY-Klausel und zur ORDER IN GROUP-Klausel.
Schachteln von Gruppen
Sie können Gruppen mit mehreren GROUP ON-Klauseln schachteln. Die in der Abfrage angegebene Reihenfolge wird direkt in der Ausgabegruppenhierarchie widergespiegelt, 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 nach Vektoreigenschaften
Die Gruppierung nach Vektoreigenschaften, Eigenschaften, die einen oder mehrere Werte gleichzeitig enthalten können, vergleicht die Vektorwerte standardmäßig einzeln. Wenn es z. B. ein Dokument gibt, Lorem.docx, mit der System.Author-Eigenschaft "Theresa; Zara" und ein weiteres Dokument, Ipsum.docx, mit der System.Author-Eigenschaft "Zara", gibt die Abfrage das Ergebnisset 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 sie über zwei Autoren verfügt.
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'))))