Delen via


GROEPEREN OP ... OVER... Verklaring

De GROEP AAN... OVER... instructie retourneert een hiërarchische rijenset waarin zoekresultaten worden onderverdeeld in groepen op basis van een opgegeven kolom en optionele groeperingsbereiken. Als u groepeert in de kolom System.Kind, is de resultatenset onderverdeeld in meerdere groepen: één voor documenten, één voor communicatie, enzovoort. Als u groepeert op System.Size en groepbereik 100 kB, wordt de resultatenset onderverdeeld in drie groepen: items van grootte < 100 kB, items van grootte >= 100 kB en items zonder groottewaarde. U kunt ook groeperingen aggregeren met functies.

In dit onderwerp worden de volgende onderwerpen behandeld:

Syntaxis

De GROEP AAN ... OVER... de instructie heeft de volgende syntaxis:

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

waarbij groeperingsbereiken als volgt worden gedefinieerd:

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

De kolom GROUP ON <kolom> kan een gewone of gescheiden id zijn voor een eigenschap in het eigenschappenarchief.

Het optionele <groepsbereik> is een lijst met een of meer waarden (getal, datum of tekenreeks) die worden gebruikt voor het delen van de resultaten in groepen. De <bereiklimiet> identificeert een delingspunt in de geretourneerde resultatenset en de

De eerste groep resultaten bevat items met de minimaal mogelijke waarde voor de opgegeven eigenschap tot en met de eerste bereiklimiet. Deze groep kan worden verwezen met het trefwoord MINVALUE. De tweede groep kan worden verwezen met de bereiklimietaanduiding zelf en bevat items waarvan de waarde voor de opgegeven eigenschap gelijk is aan of groter is dan de bereiklimiet. Alle items die geen waarde voor de opgegeven eigenschap hebben, worden als laatste geretourneerd en kunnen worden verwezen met het trefwoord NULL-.

Bijvoorbeeld: een bereiklimiet van 2006-01-01 voor de eigenschap System.DateCreated verdeelt de resultatenset in items met datums vóór 2006-01-01 (MINVALUE-groep), items met datums op of na 2006-01-01 (groep 2006-01-01) en items zonder datum (NULL- groep).

Binnen elke groep worden de resultaten standaard gesorteerd op de waarden in de kolom GROUP ON. De optionele ORDER BY-component kan een richtingaanduiding bevatten van ASC voor oplopend (laag naar hoog) of DESC voor aflopend (hoog tot laag) en de ORDER IN GROUP BY component kan elke groep met verschillende regels orden. Zie de sectie Groepen bestellen hieronder voor meer informatie.

Groepsbereiken

In de volgende tabel ziet u hoe resultaten worden onderverdeeld in groepen op basis van de bereiklimieten:

Voorbeeld (<kolom> [groepsbereiken]) Resultaat
System.Size [1000, 5000] Resultaten worden gegroepeerd in vier buckets: MINVALUE: Grootte < 1000
1000: 1000 <= Grootte < 5000
5000: Grootte >= 5000
NULL: Geen waarde voor Grootte
System.Author [BEFORE('m'),AFTER('r')] Resultaten worden gegroepeerd in vier buckets: MINVALUE: Auteur < teken vóór 'm'
m: teken vóór "m" <= < teken na "r"
r: teken na "r" <= Auteur
NULL: Geen waarde voor Auteur
System.Author [MINVALUE/'a to l',"m"/'m to z'] Resultaten worden gegroepeerd in drie buckets: a tot en met l: Auteur < 'm'
m tot z: "m" <= Auteur
NULL: Geen waarde voor Auteur
System.DateCreated ['2005-1-01','2006-6-01'] Resultaten worden gegroepeerd in vier buckets:
MINVALUE: DateCreated < 2005-1-01
2005-1-01: 2005-1-01 <= DateCreated < 2006-6-01
2006-1-01: DateCreated >= 2006-6-01
NULL: Geen waarde voor DateCreated

 

 

Belangrijk

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

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

 

 

Labelgroepen

Als u de leesbaarheid wilt verbeteren, kunt u groepen labelen met behulp van de volgende syntaxis:

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

Het label wordt gescheiden van de bereiklimiet met een slashmarkering en wordt tussen enkele aanhalingstekens geplaatst. Als u geen label opgeeft, is de groepsnaam de bereiklimiettekenreeks.

Hier volgt een voorbeeld van labelgroepen:

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

In Windows 7 of hoger kunt u ook een algemeen [ANDER] label gebruiken om meerdere groeperingsbereiken te combineren. Resultaten van alle groepen die met dit label worden geïdentificeerd, worden gecombineerd in één groep met dit label. Deze groep resultaten wordt geretourneerd na alle andere groepen, met uitzondering van de NULL- groep. De groep NULL- bevat resultaten voor items die geen waarde hebben voor de opgegeven eigenschap. Vóór Windows 7 wordt het label [OTHER] behandeld als elk ander groepslabel.

De volgende code is een voorbeeld van het gebruik van het label [ANDERE] voor groepen die worden gemaakt in Windows 7 of hoger:

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

In de volgende tabel ziet u de groepen die worden gemaakt door de voorgaande groeperingscode in Windows 7 of hoger.

Groep System.Author System.FileName
0 1Bill Lorem.docx
Q Koningin Ipsum.docx
Roodborstje dolor.docx
Y Zara amet.docx
[OVERIG] Abner nonummy.docx
Bob laoreet.docx
Xaria magna.docx
NULL- aliquam.docx

 

Groepen ordenen

Er zijn drie manieren om items in groepen te orden:

  • Standaardvolgorde: Als u anders niet opgeeft, worden de resultaten gerangschikt op basis van de waarden in de kolom GROUP ON, in oplopende volgorde.
  • ORDER BY: U kunt aflopende volgorde opgeven in een ORDER BY-component. U moet de resultaten ordenen op de kolom GROUP ON.
  • ORDER IN GROUP BY: U kunt een andere volgorde opgeven voor elke groep. Als u groeperen op System.Kind, kunt u documenten bestellen op System.Author en muziek op System.Music.Artist.

Zie de ORDER BY-component en ORDER IN GROUP Clause referentiepagina's voor meer informatie over het ordenen van resultaten.

Groepen nesten

U kunt groepen nesten met meerdere GROUP ON-componenten. De volgorde die in de query is opgegeven, wordt rechtstreeks weergegeven in de uitvoergroephiërarchie, zoals wordt weergegeven in het volgende voorbeeld.

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

 

 

Groeperen op vectoreigenschappen

Groeperen op vectoreigenschappen, eigenschappen die tegelijkertijd een of meer waarden kunnen bevatten, vergelijkt standaard de vectorwaarden afzonderlijk. Als er bijvoorbeeld één document is, Lorem.docx, met de eigenschap System.Author als 'Theresa; Zara' en een ander document, Ipsum.docx, met de eigenschap System.Author als 'Zara', retourneert de query de resultatenset in twee groepen, zoals hier wordt weergegeven:

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

 

Zoals u kunt zien, retourneert groepering op vectoreigenschappen dubbele rijen. Lorem.docx twee keer wordt weergegeven omdat er twee auteurs zijn.

 

Meer voorbeelden

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

statistische functies

ORDER BY-component

ORDER IN GROUP-component