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
- Intervalos de Grupo
- Grupos de etiquetagem
- Encomendar Grupos
- Grupos de nidificação
- Agrupamento em propriedades vetoriais
- mais exemplos
- Tópicos relacionados
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'))))
Tópicos relacionados