GROUP ON ... OLTRE... Affermazione
IL GRUPPO SU... OLTRE... L'istruzione restituisce un set di righe gerarchico in cui i risultati della ricerca vengono divisi in gruppi in base a una colonna specificata e a intervalli di raggruppamento facoltativi. Se si esegue il raggruppamento nella colonna System.Kind , il set di risultati viene suddiviso in più gruppi: uno per i documenti, uno per le comunicazioni e così via. Se si raggruppa in System.Size e nell'intervallo di gruppo 100 KB, il set di risultati viene diviso in tre gruppi: elementi di dimensioni pari a 100 KB, elementi di dimensioni <>= 100 KB e elementi senza valore di dimensione. È anche possibile aggregare i raggruppamenti con le funzioni.
In questo argomento vengono illustrati gli argomenti seguenti:
- Sintassi
- Intervalli di gruppi
- Gruppi di etichettatura
- Gruppi di ordinamento
- Annidamento di gruppi
- Raggruppamento in proprietà vettoriali
- Altri esempi
- Argomenti correlati
Sintassi
IL GRUPPO SU ... OLTRE... L'istruzione ha la sintassi seguente:
GROUP ON <column> ['['<group ranges>']']]
[AGGREGATE <aggregate_function>]
[ORDER BY <column> [<direction>]] | [ORDER IN GROUP '<group name>' BY <column> [<direction>]]
OVER (GROUP ON... | SELECT... ] )
dove gli intervalli di raggruppamento sono definiti come segue:
<group ranges> := <range limit> [/'<label>'] | <range limit> [/'<label>'], <group ranges>
<range limit> := (<number> | <date> | '<string>' | BEFORE('<string>') | AFTER('<string>'))
La colonna> GROUP ON <può essere un identificatore normale o delimitato per una proprietà nell'archivio delle proprietà.
L'intervallo> di gruppi facoltativo <è un elenco di uno o più valori (numero, data o stringa) usati per dividere i risultati in gruppi. Il <limite> di intervallo identifica un punto di divisione nel set di risultati restituito e
Il primo gruppo di risultati include gli elementi con il valore minimo possibile per la proprietà specificata fino a ma non include il limite del primo intervallo. Questo gruppo può essere indicato con la parola chiave MINVALUE. Il secondo gruppo può essere indicato con l'identificatore di limite di intervallo stesso e include elementi il cui valore per la proprietà specificata è uguale o maggiore del limite di intervallo. Tutti gli elementi che non hanno un valore per la proprietà specificata vengono restituiti per ultimo e possono essere indicati con la parola chiave NULL .
Ad esempio, un limite di intervallo di '2006-01-01' per la proprietà System.DateCreated divide il set di risultati in elementi con date precedenti al 2006-01-01 (gruppo MINVALUE), gli elementi con date su o dopo il 2006-01-01 (gruppo 2006-01-01) e gli elementi senza data (gruppo NULL ).
All'interno di ogni gruppo, i risultati vengono ordinati in base ai valori nella colonna GROUP ON per impostazione predefinita. La clausola ORDER BY facoltativa può contenere un identificatore di direzione di ASC per l'ordine crescente (da basso a alto) o DESC per decrescente (da alto a basso) e la clausola ORDER IN GROUP BY può ordinare ogni gruppo usando regole diverse. Per altre informazioni, vedere la sezione Gruppi di ordinamento più avanti.
Intervalli di gruppi
La tabella seguente illustra come i risultati vengono divisi in gruppi in base ai limiti dell'intervallo:
Esempio (<colonna> [intervalli di gruppi]) | Risultato |
---|---|
System.Size [1000, 5000] | I risultati vengono raggruppati in quattro bucket: MINVALUE: Dimensioni < 1000 1000: 1000 <= Dimensioni < 5000 5000: Dimensioni >= 5000 NULL: Nessun valore per Size |
System.Author [BEFORE('m'),AFTER('r')] | I risultati vengono raggruppati in quattro bucket: MINVALUE: Autore < carattere prima di "m" m: carattere prima di "m" <= Autore < carattere dopo "r" r: character after "r" <= Author NULL: Nessun valore per Author |
System.Author [MINVALUE/'a a l',"m"/'m to z'] | I risultati vengono raggruppati in tre bucket: a l: Author < "m" da m a z: "m" <= Autore NULL: Nessun valore per Author |
System.DateCreated ['2005-1-01','2006-6-01'] | I risultati vengono raggruppati in quattro bucket: MINVALUE: DataCreata < 2005-1-01 2005-1-01: 2005-1-01 <= DataCreata < 2006-6-01 2006-1-01: DateCreated >= 2006-6-01 NULL: Nessun valore per DateCreated |
Importante
Errato: GROUP ON System.Author['m','z','a']
Corretta: GROUP ON System.Author['a','m','z']
Gruppi di etichettatura
Per migliorare la leggibilità, è possibile etichettare i gruppi usando la sintassi seguente:
GROUP ON <column> [<range limit>/'<label>',<range limit>/'<label>']
L'etichetta è separata dal limite di intervallo con una barra e racchiusa tra virgolette singole. Se non si specifica un'etichetta, il nome del gruppo è la stringa di limite di intervallo.
Di seguito è riportato un esempio di gruppi di etichettatura:
GROUP ON System.Size [(MINVALUE/'Small','100')/'Medium','50000'/'Large']
OVER (SELECT System.Size FROM SystemIndex)
In Windows 7 o versione successiva è anche possibile usare un'etichetta [OTHER] generica per combinare più intervalli di raggruppamento. I risultati di tutti i gruppi identificati con questa etichetta verranno combinati in un unico gruppo con questa etichetta. Questo gruppo di risultati viene restituito dopo tutti gli altri gruppi, ad eccezione del gruppo NULL . Il gruppo NULL contiene i risultati per gli elementi che non hanno un valore per la proprietà specificata. Prima di Windows 7 l'etichetta [OTHER] viene considerata come qualsiasi altra etichetta di gruppo.
Il codice seguente è un esempio di uso dell'etichetta [OTHER] per i gruppi che verrebbero creati in Windows 7 o versione successiva:
GROUP ON System.Author ['0', 'A'/'[OTHER]', 'I', 'Q', 'W'/'[OTHER]', 'Y']
OVER (SELECT System.DateCreated FROM SystemIndex)
La tabella seguente illustra i gruppi che verrebbero creati dal codice di raggruppamento precedente in Windows 7 o versione successiva.
Gruppo | System.Author | System.FileName |
---|---|---|
0 | 1Bill | Lorem.docx |
Q | Regina | Ipsum.docx |
Robin | dolor.docx | |
S | Zara | amet.docx |
[ALTRO] | Abner | nonummy.docx |
Bob | laoreet.docx | |
Xaria | magna.docx | |
NULL | aliquam.docx |
Gruppi di ordinamento
Esistono tre modi per ordinare gli elementi nei gruppi:
- Ordinamento predefinito: se non si specifica diversamente, i risultati vengono ordinati in base ai valori nella colonna GROUP ON, in ordine crescente.
- ORDER BY: è possibile specificare l'ordine decrescente in una clausola ORDER BY. È necessario ordinare i risultati in base alla colonna GROUP ON.
- ORDER IN GROUP BY: è possibile specificare un ordine diverso per ogni gruppo. Se si raggruppa su System.Kind, è possibile ordinare i documenti in base a System.Author e musica di System.Music.Artist.
Per altre informazioni sui risultati dell'ordinamento, vedere le pagine di riferimento della clausola ORDER BY e ORDER IN GROUP.
Gruppi di annidamento
È possibile annidare gruppi con più clausole GROUP ON. L'ordine specificato nella query viene riflesso direttamente nella gerarchia del gruppo di output, come illustrato nell'esempio seguente.
GROUP ON <System.Kind>
OVER (GROUP ON <System.Author>
OVER (SELECT <System.DateCreated>))
System.Kind | System.Author | System.DateCreated |
---|---|---|
documenti | Willa | 2006-01-02 |
2006-01-05 | ||
Zara | 2007-06-02 | |
2007-09-10 | ||
(DIP) interno | Abner | 2006-04-16 |
Jean | 2007-02-20 | |
Willa | 2006-10-15 | |
Zara | 2008-01-02 |
Raggruppamento in proprietà vettoriali
Raggruppando le proprietà del vettore, le proprietà che possono contenere uno o più valori contemporaneamente, confrontano i valori del vettore singolarmente per impostazione predefinita. Ad esempio, se è presente un documento, Lorem.docx, con la proprietà System.Author come "Theresa; Zara" e un altro documento, Ipsum.docx, con la proprietà System.Author come "Zara", la query restituisce il set di risultati in due gruppi, come illustrato di seguito:
GROUP ON <System.Author>
OVER (SELECT <System.FileName>)
System.Author | System.FileName |
---|---|
Theresa | Lorem.docx |
Zara | Lorem.docx |
Ipsum.docx |
Come si può notare, il raggruppamento sulle proprietà vettoriali restituisce righe duplicate. Lorem.docx viene visualizzato due volte perché ha due autori.
Altri esempi
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'))))
Argomenti correlati