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:
- de sintaxis de
- de intervalos de grupo de
- grupos de etiquetado
- grupos de ordenación
- de grupos de anidamiento
- agrupación en propiedades vectoriales
- más ejemplos
- temas relacionados
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'))))
Temas relacionados