Partilhar via


GRUPO EM ... MAIS DE ... Declaração

O GRUPO EM... MAIS... 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 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 abrange os seguintes assuntos:

Sintaxe

O GRUPO EM ... MAIS DE ... 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 do seguinte modo:

<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.

A> de intervalo de grupo <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 de <> 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. Este grupo pode ser referido com a palavra-chave MINVALUE. O segundo grupo pode ser referido com o próprio especificador de limite de intervalo e inclui itens cujo valor para a propriedade especificada é igual ou maior do 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 referidos 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 anteriores a 2006-01-01 (grupo MINVALUE), itens com datas em ou após 2006-01-01 (grupo 2006-01-01) e itens sem data (grupo NULL).

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

Intervalos de grupos

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

Exemplo (<coluna> [intervalos de grupos]) Resultado
System.Size [1000, 5000] Os resultados são agrupados em quatro grupos: MINVALUE: Tamanho < 1000
1000: 1000 <= Tamanho < 5000
5000: Tamanho>= 5000
NULL: Nenhum valor para Tamanho
System.Author [ANTES('m'),DEPOIS('r')] Os resultados são agrupados em quatro grupos: MINVALUE: Autor < caractere antes de "m"
m: caractere antes de "m" <= Autor < caractere depois de "r"
r: caractere após "r" <= Autor
NULL: Nenhum valor para o autor
System.Author [MINVALUE/'a a l',"m"/'m a z'] Os resultados são agrupados em três grupos: a a l: Autor < "m"
m a z: "m" <= Autor
NULL: Nenhum valor para o autor
System.DateCreated ['2005-1-01','2006-6-01'] Os resultados são agrupados em quatro grupos:
MINVALUE: DateCriado < 2005-1-01
2005-1-01: 2005-1-01 <= Datacriada < 2006-6-01
2006-1-01: DataCriação >= 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 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.

Segue-se 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 genérico [OTHER] para combinar vários intervalos de agrupamento. Os resultados de todos os grupos identificados com este rótulo serão combinados num único grupo com este rótulo. Esse grupo de resultados é retornado após todos os outros grupos, exceto para o grupo 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 [OUTRO] era tratado como qualquer outro rótulo de grupo.

O código a seguir é um exemplo de uso do 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 1Projeto de lei Lorem.docx
Q Rainha Ipsum.docx
Robin dolor.docx
Y Zara amet.docx
[OUTROS] Abner nonummy.docx
Joaquim laoreet.docx
Xaria magna.docx
NULL aliquam.docx

 

Encomendar Grupos

Há três maneiras de ordenar 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.
  • ORDEM EM GRUPO POR: Você pode especificar uma ordem diferente para cada grupo. Se você agrupar em System.Kind, você pode encomendar documentos por System.Author e música por System.Music.Artist.

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

Grupos de aninhamento

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
Documentação Willa 2006-01-02
2006-01-05
Zara 2007-06-02
2007-09-10
Comunicações Abner 2006-04-16
Joana 2007-02-20
Willa 2006-10-15
Zara 2008-01-02

 

 

Agrupamento em propriedades vetoriais

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
Teresa 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 agregadas

ENCOMENDAR POR Cláusula

ORDEM NO GRUPO Cláusula