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:
- Sintaxis
- Intervalos de grupo
- Grupos de etiquetado
- Ordenar grupos
- Anidamiento de grupos
- Agrupación en propiedades de vector
- Más ejemplos
- Temas relacionados
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'))))
Temas relacionados