Compartilhar via


AGRUPAR EM... SOBRE... Declaração

O GRUPO LIGADO... SOBRE... instrução retorna um conjunto de linhas hierárquico no qual os resultados da pesquisa são divididos em grupos com base em uma coluna especificada e intervalos de agrupamento opcionais. Se você agrupar na coluna System.Kind, o conjunto de resultados será dividido em vários grupos: um para documentos, um para comunicações e assim por diante. Se você agrupar em System.Size e intervalo de grupos de 100 KB, o conjunto de resultados será dividido em três grupos: itens de tamanho < 100 KB, itens de tamanho >= 100 KB e itens sem valor de tamanho. Você também pode agregar agrupamentos com funções.

Este tópico aborda os seguintes assuntos:

Sintaxe

O GRUPO LIGADO... SOBRE... a instrução tem a seguinte sintaxe:

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

em que os intervalos de agrupamento são definidos da seguinte maneira:

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

A coluna GROUP ON <> pode ser um identificador de regular ou delimitado para uma propriedade no repositório de propriedades.

O intervalo de grupos <opcional> é uma lista de um ou mais valores (número, data ou cadeia de caracteres) usados para dividir os resultados em grupos. O limite de intervalo <> identifica um ponto de divisão no conjunto de resultados retornado e o

O primeiro grupo de resultados inclui itens com o valor mínimo possível para a propriedade especificada até, mas não incluindo o primeiro limite de intervalo. Esse grupo pode ser referenciado com a palavra-chave MINVALUE. O segundo grupo pode ser referenciado com o próprio especificador de limite de intervalo e inclui itens cujo valor para a propriedade especificada é igual ou maior que o limite de intervalo. Todos os itens que não têm um valor para a propriedade especificada são retornados por último e podem ser referenciados com a palavra-chave NULL.

Por exemplo, um limite de intervalo de '2006-01-01' para a propriedade System.DateCreated divide o conjunto de resultados em itens com datas antes de 2006-01-01 (MIN GrupoVALUE), itens com datas em ou após 2006-01-01 (grupo 2006-01-01) e itens sem data (grupo nulo).

Em cada grupo, os resultados são classificados pelos valores na coluna GROUP ON por padrão. A cláusula ORDER BY opcional pode conter um especificador de direção de ASC para crescente (baixo a alto) ou DESC para decrescente (alto a baixo) e a cláusula ORDER IN GROUP BY pode ordenar cada grupo usando regras diferentes. Consulte a seção Grupos de Ordenação abaixo para obter mais informações.

Intervalos de grupo

A tabela a seguir demonstra como os resultados são divididos em grupos com base nos limites de intervalo:

Exemplo (> de coluna<[intervalos de grupo]) Resultado
System.Size [1000, 5000] Os resultados são agrupados em quatro buckets: minvalue: tamanho < 1000
1000: 1000 <= Tamanho < 5000
5000: tamanho>= 5000
NULL: Nenhum valor para Tamanho
System.Author [BEFORE('m'),AFTER('r')] Os resultados são agrupados em quatro buckets: MINVALUE: Autor < caractere antes de "m"
m: caractere antes de "m" <= Autor < caractere após "r"
r: caractere após "r" <= Autor
NULL: Nenhum valor para o Autor
System.Author [MINVALUE/'a to l',"m"/'m to z'] Os resultados são agrupados em três buckets: a l: Author < "m"
m a z: "m" <= Author
NULL: Nenhum valor para o Autor
System.DateCreated ['2005-1-01','2006-6-01'] Os resultados são agrupados em quatro buckets:
MINVALUE: DateCreated < 2005-1-01
2005-1-01: 2005-1-01 <= DateCreated < 2006-6-01
2006-1-01: DateCreated >= 2006-6-01
NULL: Nenhum valor para DateCreated

 

 

Importante

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

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

 

 

Grupos de rotulagem

Para melhorar a legibilidade, você pode rotular grupos usando a seguinte sintaxe:

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

O rótulo é separado do limite de intervalo com uma marca de barra e está entre aspas simples. Se você não especificar um rótulo, o nome do grupo será a cadeia de caracteres de limite de intervalo.

Veja a seguir um exemplo de grupos de rotulagem:

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

No Windows 7 ou posterior, você também pode usar um rótulo [OTHER] genérico para combinar vários intervalos de agrupamento. Os resultados de todos os grupos identificados com esse rótulo serão combinados em um grupo com esse rótulo. Esse grupo de resultados é retornado depois que todos os outros grupos, exceto o grupo de NULL. O grupo NULL contém resultados para itens que não têm um valor para a propriedade especificada. Antes do Windows 7, o rótulo [OTHER] é tratado como qualquer outro rótulo de grupo.

O código a seguir é um exemplo de como usar o rótulo [OTHER] para grupos que seriam criados no Windows 7 ou posterior:

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

A tabela a seguir mostra os grupos que seriam criados pelo código de agrupamento anterior no Windows 7 ou posterior.

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

 

Ordenando grupos

Há três maneiras de solicitar itens em grupos:

  • Ordenação padrão: se você não especificar o contrário, os resultados serão ordenados pelos valores na coluna GROUP ON, em ordem crescente.
  • ORDER BY: Você pode especificar a ordem decrescente em uma cláusula ORDER BY. Você deve ordenar os resultados pela coluna GROUP ON.
  • ORDER IN GROUP BY: Você pode especificar uma ordem diferente para cada grupo. Se você agrupar no System.Kind, poderá solicitar documentos System.Author e música por System.Music.Artist.

Para obter mais informações sobre como ordenar resultados, consulte as páginas de referência da Cláusula ORDER BY e ORDER IN GROUP páginas de referência.

Aninhando grupos

Você pode aninhar grupos com várias cláusulas GROUP ON. A ordem especificada na consulta é refletida diretamente na hierarquia do grupo de saída, conforme mostrado no exemplo a seguir.

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
Comunicações Abner 2006-04-16
Jean 2007-02-20
Willa 2006-10-15
Zara 2008-01-02

 

 

Agrupamento em propriedades de vetor

O agrupamento em propriedades de vetor, propriedades que podem conter um ou mais valores simultaneamente, compara os valores de vetor individualmente por padrão. Por exemplo, se houver um documento, Lorem.docx, com a propriedade System.Author como "Theresa; Zara" e outro documento, Ipsum.docx, com a propriedade System.Author como "Zara", a consulta retorna o conjunto de resultados em dois grupos, conforme mostrado aqui:

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

 

Como você pode ver, o agrupamento em propriedades de vetor retorna linhas duplicadas. Lorem.docx aparece duas vezes porque tem dois autores.

 

Mais exemplos

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

Funções de agregação

cláusula ORDER BY

da cláusula ORDER IN GROUP