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

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

Fonctions d’agrégation

ORDER BY Clause

ORDER IN GROUP Clause