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
- groepsbereiken
- labelgroepen
- Groepen ordenen
- Groepen nesten
- groeperen op vectoreigenschappen
- meer voorbeelden
- Verwante onderwerpen
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'))))
Verwante onderwerpen