Instruction GROUP ON... OVER...
The GROUP ON... SUR... l’instruction retourne un ensemble de lignes hiérarchique dans lequel les résultats de la recherche sont divisés en groupes en fonction d’une colonne spécifiée et de plages de regroupement facultatives. Si vous effectuez un groupe sur la colonne System.Kind , le jeu de résultats est divisé en plusieurs groupes : un pour les documents, un pour les communications, etc. Si vous regroupez sur System.Size et une plage de groupes de 100 Ko, le jeu de résultats est divisé en trois groupes : les éléments de taille < 100 Ko, les éléments de taille >= 100 Ko et les éléments sans valeur de taille. Vous pouvez également agréger des regroupements avec des fonctions.
Cette rubrique couvre les sujets suivants :
- Syntaxe
- Plages de groupes
- Étiquetage des groupes
- Classement des groupes
- Imbrication de groupes
- Regroupement sur les propriétés vectorielles
- Autres exemples
- Rubriques connexes
Syntaxe
LE GROUPE ON ... SUR... L’instruction a la syntaxe suivante :
GROUP ON <column> ['['<group ranges>']']]
[AGGREGATE <aggregate_function>]
[ORDER BY <column> [<direction>]] | [ORDER IN GROUP '<group name>' BY <column> [<direction>]]
OVER (GROUP ON... | SELECT... ] )
où les plages de regroupement sont définies comme suit :
<group ranges> := <range limit> [/'<label>'] | <range limit> [/'<label>'], <group ranges>
<range limit> := (<number> | <date> | '<string>' | BEFORE('<string>') | AFTER('<string>'))
La colonne> GROUP ON <peut être un identificateur régulier ou délimité pour une propriété dans le magasin de propriétés.
La plage> de groupes facultative <est une liste d’une ou plusieurs valeurs (nombre, date ou chaîne) utilisées pour diviser les résultats en groupes. La <limite> de plage identifie un point de division dans le jeu de résultats retourné, et identifie
Le premier groupe de résultats inclut des éléments dont la valeur minimale possible pour la propriété spécifiée jusqu’à la première limite de plage n’est pas comprise. Ce groupe peut être référencé avec l’mot clé MINVALUE. Le deuxième groupe peut être référencé avec le spécificateur de limite de plage lui-même et inclut des éléments dont la valeur pour la propriété spécifiée est égale ou supérieure à la limite de plage. Tous les éléments qui n’ont pas de valeur pour la propriété spécifiée sont retournés en dernier et peuvent être référencés avec l’mot clé NULL.
Par exemple, une limite de plage de « 2006-01-01 » pour la propriété System.DateCreated divise le jeu de résultats en éléments dont les dates sont antérieures à 2006-01-01 (groupe MINVALUE), les éléments ayant des dates à compter du 01-01-2006 (groupe 2006-01-01) et les éléments sans date (groupe NULL ).
Dans chaque groupe, les résultats sont triés par défaut en fonction des valeurs de la colonne GROUP ON. La clause ORDER BY facultative peut contenir un spécificateur de direction ASC pour croissant (faible à élevé) ou DESC pour décroissant (élevé à faible), et la clause ORDER IN GROUP BY peut classer chaque groupe à l’aide de règles différentes. Pour plus d’informations, consultez la section Classement des groupes ci-dessous.
Plages de groupes
Le tableau suivant montre comment les résultats sont divisés en groupes en fonction des limites de plage :
Exemple (<colonne> [plages de groupes]) | Résultats |
---|---|
System.Size [1000, 5000] | Les résultats sont regroupés en quatre compartiments : MINVALUE : Taille < 1000 1000 : 1000 <= Taille < 5000 5000 : Taille >= 5000 NULL: Aucune valeur pour Size |
System.Author [BEFORE('m'),AFTER('r')] | Les résultats sont regroupés en quatre compartiments : MINVALUE : Caractère d’auteur < avant « m » m: character before « m » <= Author < character after « r » r: character after « r » <= Author NULL: Aucune valeur pour Author |
System.Author [MINVALUE/'a to l',"m"/'m to z'] | Les résultats sont regroupés en trois compartiments : a à l: Author < « m » m à z : « m » <= Auteur NULL: Aucune valeur pour Author |
System.DateCreated ['2005-1-01','2006-6-01'] | Les résultats sont regroupés en quatre compartiments : MINVALUE: DateCreated < 2005-1-01 2005-1-01 : 2005-1-01 <= DateCreated < 2006-6-01 2006-1-01 : DateCreated >= 2006-06-01 NULL: Aucune valeur pour DateCreated |
Important
Incorrect: GROUP ON System.Author['m','z','a']
Correcte: GROUP ON System.Author['a','m','z']
Étiquetage des groupes
Pour améliorer la lisibilité, vous pouvez étiqueter des groupes à l’aide de la syntaxe suivante :
GROUP ON <column> [<range limit>/'<label>',<range limit>/'<label>']
L’étiquette est séparée de la limite de plage par une barre oblique et est placée entre guillemets simples. Si vous ne spécifiez pas d’étiquette, le nom du groupe est la chaîne de limite de plage.
Voici un exemple d’étiquetage de groupes :
GROUP ON System.Size [(MINVALUE/'Small','100')/'Medium','50000'/'Large']
OVER (SELECT System.Size FROM SystemIndex)
Dans Windows 7 ou version ultérieure, vous pouvez également utiliser une étiquette générique [OTHER] pour combiner plusieurs plages de regroupement. Les résultats de tous les groupes identifiés avec cette étiquette seront combinés en un seul groupe avec cette étiquette. Ce groupe de résultats est retourné après tous les autres groupes à l’exception du groupe NULL . Le groupe NULL contient des résultats pour les éléments qui n’ont pas de valeur pour la propriété spécifiée. Avant Windows 7, l’étiquette [OTHER] est traitée comme n’importe quelle autre étiquette de groupe.
Le code suivant est un exemple d’utilisation de l’étiquette [OTHER] pour les groupes qui seraient créés dans Windows 7 ou version ultérieure :
GROUP ON System.Author ['0', 'A'/'[OTHER]', 'I', 'Q', 'W'/'[OTHER]', 'Y']
OVER (SELECT System.DateCreated FROM SystemIndex)
Le tableau suivant montre les groupes qui seraient créés par le code de regroupement précédent dans Windows 7 ou version ultérieure.
Groupe | System.Author | System.FileName |
---|---|---|
0 | 1Bill | Lorem.docx |
Q | Reine | Ipsum.docx |
Robin | dolor.docx | |
O | Zara | amet.docx |
[AUTRE] | Abner | nonummy.docx |
Bob | laoreet.docx | |
Xaria | magna.docx | |
NULL | aliquam.docx |
Classement des groupes
Il existe trois façons de classer des éléments dans des groupes :
- Classement par défaut : si vous ne spécifiez pas le contraire, les résultats sont classés par les valeurs de la colonne GROUP ON, dans l’ordre croissant.
- ORDER BY : vous pouvez spécifier l’ordre décroissant dans une clause ORDER BY. Vous devez classer les résultats par la colonne GROUP ON.
- ORDER IN GROUP BY : vous pouvez spécifier un ordre différent pour chaque groupe. Si vous effectuez un groupe sur System.Kind, vous pouvez commander des documents par System.Author et de la musique par System.Music.Artist.
Pour plus d’informations sur le classement des résultats, consultez les pages de référence clause ORDER BY et CLAUSE ORDER IN GROUP .
Imbrication de groupes
Vous pouvez imbriquer des groupes avec plusieurs clauses GROUP ON. L’ordre spécifié dans la requête est directement reflété dans la hiérarchie du groupe de sortie, comme illustré dans l’exemple suivant.
GROUP ON <System.Kind>
OVER (GROUP ON <System.Author>
OVER (SELECT <System.DateCreated>))
System.Kind | System.Author | System.DateCreated |
---|---|---|
dans des documents | Willa | 2006-01-02 |
2006-01-05 | ||
Zara | 2007-06-02 | |
2007-09-10 | ||
communications | Abner | 2006-04-16 |
Jean | 2007-02-20 | |
Willa | 2006-10-15 | |
Zara | 2008-01-02 |
Regroupement sur les propriétés vectorielles
Le regroupement sur les propriétés vectorielles, propriétés qui peuvent contenir une ou plusieurs valeurs simultanément, compare les valeurs vectorielles individuellement par défaut. Par exemple, s’il existe un document, Lorem.docx, avec la propriété System.Author comme « Theresa ; Zara » et un autre document, Ipsum.docx, avec la propriété System.Author « Zara », la requête retourne le jeu de résultats en deux groupes, comme illustré ici :
GROUP ON <System.Author>
OVER (SELECT <System.FileName>)
System.Author | System.FileName |
---|---|
Theresa | Lorem.docx |
Zara | Lorem.docx |
Ipsum.docx |
Comme vous pouvez le voir, le regroupement sur les propriétés vectorielles renvoie des lignes en double. Lorem.docx apparaît deux fois, car il a deux auteurs.
Plus d'exemples
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'))))
Rubriques connexes