Freigeben über


GRUPPIEREN NACH ... ÜBER... Aussage

Die GRUPPE AKTIVIERT... Ü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 Spalte gruppieren, wird das Resultset in mehrere Gruppen unterteilt: eine für Dokumente, eine für 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 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

DIE GRUPPE AM ... Ü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 sind:

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

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

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

Die erste Gruppe von Ergebnissen enthält Elemente mit dem minimalen möglichen Wert für die angegebene Eigenschaft bis hin zum ersten Bereichsgrenzwert. Auf diese Gruppe kann mit dem MINVALUE-Schlüsselwort verwiesen werden. Die zweite Gruppe kann mit dem Bereichsgrenzbezeichner selbst bezeichnet 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 schlüsselwort NULL verwiesen werden.

Beispiel: ein Bereichslimit von "2006-01-01" für die System.DateCreated-Eigenschaft teilt das Resultset in Elemente mit Datumsangaben vor 2006-01-01 (MINWERT-Gruppe), Elemente mit Datumsangaben am oder nach 2006-01-01 (2006-01-01-01-Gruppe) und Elemente ohne Datum (NULL Gruppe).

Innerhalb jeder Gruppe werden die Ergebnisse standardmäßig nach den Werten in der SPALTE GROUP ON sortiert. Die optionale ORDER BY--Klausel kann einen Richtungsbezeichner 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 unterschiedlicher Regeln anordnen. Weitere Informationen finden Sie im Abschnitt Sortieren von Gruppen weiter unten.

Gruppenbereiche

In der folgenden Tabelle wird veranschaulicht, wie Die Ergebnisse auf der Grundlage der Bereichsgrenzwerte 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" <= Author < Zeichen nach "r"
r: Zeichen nach "r" <= Autor
NULL: Kein Wert für Author
System.Author [MINVALUE/'a to l',"m"/'m to z'] 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:
MINWERT: 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

Falsch: 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 Beschriftung wird von der Bereichsgrenze mit einem 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 sehen 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 aller mit dieser Bezeichnung identifizierten Gruppen werden in einer Gruppe mit dieser Bezeichnung kombiniert. Diese Ergebnisgruppe wird nach allen anderen Gruppen zurückgegeben, mit Ausnahme der NULL- Gruppe. Die NULL- Gruppe enthält Ergebnisse für Elemente, die keinen Wert für die angegebene Eigenschaft aufweisen. Vor Windows 7 wird die [OTHER]-Bezeichnung wie jede andere Gruppenbezeichnung behandelt.

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

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 vorherigen Gruppierungscode in Windows 7 oder höher erstellt werden.

Gruppe System.Author System.FileName
0 1Bill Lorem.docx
Q Königin Ipsum.docx
Rotkehlchen dolor.docx
Y Zara amet.docx
[SONSTIGE] Abner nonummy.docx
Bubikopf laoreet.docx
Xaria magna.docx
NULL- aliquam.docx

 

Sortieren von Gruppen

Es gibt drei Möglichkeiten zum Sortieren von Elementen in Gruppen:

  • Standardreihenfolge: Wenn Sie andernfalls nicht angeben, werden die Ergebnisse nach den Werten in der SPALTE GROUP ON in aufsteigender Reihenfolge sortiert.
  • ORDER BY: Sie können absteigende Reihenfolge in einer ORDER BY-Klausel angeben. Sie müssen die Ergebnisse nach der SPALTE GROUP ON sortieren.
  • REIHENFOLGE IN GRUPPE NACH: 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 System.Music.Artistbestellen.

Weitere Informationen zum Sortieren von Ergebnissen finden Sie in der ORDER BY-Klausel und ORDER IN GROUP-Klausel Referenzseiten.

Verschachtelungsgruppen

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

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

 

 

Gruppieren nach Vektoreigenschaften

Beim Gruppieren nach Vektoreigenschaften, Eigenschaften, die einen oder mehrere Werte gleichzeitig enthalten können, werden die Vektorwerte standardmäßig einzeln verglichen. Wenn z. B. ein Dokument vorhanden ist, Lorem.docxmit 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