Compartir vía


AGRUPAR EN ... SOBRE... Declaración

El GRUPO ACTIVADO... 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 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 valor de tamaño. También puede agregar agrupaciones con funciones.

En este tema se tratan los temas siguientes:

Sintaxis

EL GRUPO EN ... 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 manera siguiente:

<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 de normal o delimitado para una propiedad del 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 y el

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. Este grupo se puede hacer referencia a con la palabra clave MINVALUE. El segundo grupo se puede hacer referencia al propio especificador de límite de intervalos 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 pueden hacer referencia a los 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 o después del 2006-01-01 (grupo 2006-01-01) y elementos sin fecha (grupo de NULL).

Dentro de cada grupo, los resultados se ordenan por los valores de la columna GROUP ON de forma predeterminada. La cláusula opcional ORDER BY 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 Ordering Groups siguiente 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 grupos]) 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: Ningún valor para Size
System.Author [BEFORE('m'),AFTER('r')] Los resultados se agrupan en cuatro cubos: MINVALUE: carácter author < antes de "m".
m: carácter antes de "m" <= Autor < carácter después de "r"
r: carácter después de "r" <= Autor
NULL: 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: 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: Ningún valor para DateCreated

 

 

Importante

Incorrecto: 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 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 de NULL. El grupo de 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 de uso de la etiqueta [OTHER] para grupos que se crearían en Windows 7 o posterior:

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
Petirrojo 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 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 los resultados de ordenación, vea las páginas de referencia y cláusula ORDER IN GROUP order BY.

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 vectoriales

Agrupación en propiedades vectoriales, propiedades que pueden contener uno o varios valores simultáneamente, compara los valores vectoriales 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 de

cláusula ORDER BY de

cláusula ORDER IN GROUP