Compartir a través de


Instrucción GROUP ON ... OVER...

El GRUPO ON... SOBRE... La instrucción devuelve un conjunto de filas jerárquico en el que los resultados de búsqueda se dividen en grupos basados en una columna especificada y intervalos de agrupación opcionales. Si agrupa en la columna System.Kind , el conjunto de resultados se divide en varios grupos: uno para documentos, otro para comunicaciones, etc. Si agrupa en System.Size y el intervalo de grupos de 100 KB, el conjunto de resultados se divide en tres grupos: elementos de tamaño < 100 KB, elementos de tamaño >= 100 KB y elementos sin ningún valor de tamaño. También puede agregar agrupaciones con funciones.

En este tema se tratan los temas siguientes:

Syntax

EL GRUPO ACTIVADO... SOBRE... la instrucción tiene la siguiente sintaxis:

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

donde los intervalos de agrupación se definen de la siguiente manera:

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

La columna> GROUP ON <puede ser un identificador normal o delimitado para una propiedad en el almacén de propiedades.

El intervalo> de grupos opcional <es una lista de uno o varios valores (número, fecha o cadena) que se usan para dividir los resultados en grupos. El <límite> de intervalo identifica un punto de división en el conjunto de resultados devuelto e

El primer grupo de resultados incluye elementos con el valor mínimo posible para la propiedad especificada hasta pero no incluye el primer límite de intervalo. Se puede hacer referencia a este grupo con la palabra clave MINVALUE. Se puede hacer referencia al segundo grupo con el propio especificador de límite de intervalo e incluye elementos cuyo valor para la propiedad especificada es igual o mayor que el límite de intervalo. Los elementos que no tienen un valor para la propiedad especificada se devuelven en último lugar y se puede hacer referencia a con la palabra clave NULL .

Por ejemplo, un límite de intervalo de "2006-01-01" para la propiedad System.DateCreated divide el conjunto de resultados en elementos con fechas anteriores a 2006-01-01 (grupo MINVALUE), elementos con fechas en 2006-01-01 (grupo 2006-01-01) y elementos sin fecha (grupo NULL ).

Dentro de cada grupo, los resultados se ordenan por los valores de la columna GROUP ON de forma predeterminada. La cláusula ORDER BY opcional puede contener un especificador de dirección de ASC para ascendente (bajo a alto) o DESC para descendente (alto a bajo) y la cláusula ORDER IN GROUP BY puede ordenar cada grupo mediante reglas diferentes. Consulte la sección Grupos de pedidos a continuación para obtener más información.

Intervalos de grupo

En la tabla siguiente se muestra cómo se dividen los resultados en grupos en función de los límites de intervalo:

Ejemplo (<columna> [intervalos de grupo]) Resultado
System.Size [1000, 5000] Los resultados se agrupan en cuatro cubos: MINVALUE: Tamaño < 1000
1000: 1000 <= Tamaño < 5000
5000: Tamaño >= 5000
NULL: No hay ningún valor para Size
System.Author [BEFORE('m'),AFTER('r')] Los resultados se agrupan en cuatro cubos: MINVALUE: carácter de autor < antes de "m"
m: carácter antes de "m" <= Carácter de autor < después de "r"
r: carácter después de "r" <= Author
NULL: No hay ningún valor para Author
System.Author [MINVALUE/'a to l',"m"/'m to z'] Los resultados se agrupan en tres cubos: a l: Author < "m"
m a z: "m" <= Author
NULL: No hay ningún valor para Author
System.DateCreated ['2005-1-01','2006-6-01'] Los resultados se agrupan en cuatro cubos:
MINVALUE: DateCreated < 2005-1-01
2005-1-01: 2005-1-01 <= DateCreated < 2006-6-01
2006-1-01: DateCreated >= 2006-6-01
NULL: No hay ningún valor para DateCreated

 

 

Importante

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

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

 

 

Grupos de etiquetado

Para mejorar la legibilidad, puede etiquetar grupos mediante la sintaxis siguiente:

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

La etiqueta está separada del límite de intervalo con una marca de barra diagonal y se incluye entre comillas simples. Si no especifica una etiqueta, el nombre del grupo es la cadena de límite de intervalo.

A continuación se muestra un ejemplo de grupos de etiquetado:

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

En Windows 7 o posterior, también puedes usar una etiqueta genérica [OTHER] para combinar varios intervalos de agrupación. Los resultados de todos los grupos identificados con esta etiqueta se combinarán en un grupo con esta etiqueta. Este grupo de resultados se devuelve después de todos los demás grupos, excepto el grupo NULL . El grupo NULL contiene resultados para los elementos que no tienen un valor para la propiedad especificada. Antes de Windows 7, la etiqueta [OTHER] se trata como cualquier otra etiqueta de grupo.

El código siguiente es un ejemplo del uso de la etiqueta [OTHER] para grupos que se crearían en Windows 7 o versiones posteriores:

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

En la tabla siguiente se muestran los grupos creados por el código de agrupación anterior en Windows 7 o posterior.

Grupo System.Author System.FileName
0 1Bill Lorem.docx
Q Reina Ipsum.docx
Robin dolor.docx
Y Zara amet.docx
[OTHER] Abner nonummy.docx
Bob laoreet.docx
Xaria magna.docx
NULL aliquam.docx

 

Ordenar grupos

Hay tres maneras de ordenar los elementos en grupos:

  • Ordenación predeterminada: si no especifica lo contrario, los resultados se ordenan por los valores de la columna GROUP ON, en orden ascendente.
  • ORDER BY: puede especificar el orden descendente en una cláusula ORDER BY. Debe ordenar los resultados por la columna GROUP ON.
  • ORDER IN GROUP BY: puede especificar un orden diferente para cada grupo. Si agrupa en System.Kind, puede pedir documentos por System.Author y música por System.Music.Artist.

Para obtener más información sobre cómo ordenar los resultados, vea las páginas de referencia de cláusula ORDER BY y ORDER IN GROUP Clause .

Anidamiento de grupos

Puede anidar grupos con varias cláusulas GROUP ON. El orden especificado en la consulta se refleja directamente en la jerarquía del grupo de salida, como se muestra en el ejemplo siguiente.

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

 

 

Agrupación en propiedades de vector

La agrupación en propiedades vectoriales, propiedades que pueden contener uno o varios valores simultáneamente, compara los valores vectoriales individualmente de forma predeterminada. Por ejemplo, si hay un documento, Lorem.docx, con la propiedad System.Author como "Theresa; Zara" y otro documento, Ipsum.docx, con la propiedad System.Author como "Zara", la consulta devuelve el conjunto de resultados en dos grupos, como se muestra aquí:

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

 

Como puede ver, la agrupación en propiedades vectoriales devuelve filas duplicadas. Lorem.docx aparece dos veces porque tiene dos autores.

 

Más ejemplos

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

Funciones de agregado

Cláusula ORDER BY

Cláusula ORDER IN GROUP