Bagikan melalui


GROUP ON ... ATAS... Pernyataan

GRUP AKTIF... ATAS... pernyataan mengembalikan kumpulan baris hierarkis di mana hasil pencarian dibagi menjadi grup berdasarkan kolom tertentu dan rentang pengelompokan opsional. Jika Anda mengelompokkan pada kolom System.Kind , kumpulan hasil dibagi menjadi beberapa grup: satu untuk dokumen, satu untuk komunikasi, dan sebagainya. Jika Anda mengelompokkan pada System.Size dan rentang grup 100 KB, kumpulan hasil dibagi menjadi tiga grup: item berukuran < 100 KB, item berukuran >= 100 KB, dan item tanpa nilai ukuran. Anda juga dapat menggabungkan pengelompokan dengan fungsi.

Topik ini mencakup subjek berikut:

Sintaks

GRUP AKTIF ... ATAS... pernyataan memiliki sintaks berikut:

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

di mana rentang pengelompokan didefinisikan sebagai berikut:

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

Kolom GROUP ON <> dapat menjadi pengidentifikasi reguler atau dibatasi untuk properti di penyimpanan properti.

Rentang> grup opsional <adalah daftar satu atau beberapa nilai (angka, tanggal, atau string) yang digunakan untuk membalah hasil menjadi grup. Batas <> rentang mengidentifikasi titik pembagian dalam tataan hasil yang dikembalikan, dan

Grup hasil pertama mencakup item dengan nilai minimum yang mungkin untuk properti yang ditentukan hingga tetapi tidak termasuk batas rentang pertama. Grup ini dapat dirujuk dengan kata kunci MINVALUE. Grup kedua dapat dirujuk dengan penentu batas rentang itu sendiri dan menyertakan item yang nilainya untuk properti yang ditentukan sama dengan atau lebih besar dari batas rentang. Item apa pun yang tidak memiliki nilai untuk properti yang ditentukan dikembalikan terakhir dan dapat dirujuk dengan kata kunci NULL .

Misalnya, batas rentang '2006-01-01' untuk properti System.DateCreated membagi hasil yang ditetapkan menjadi item dengan tanggal sebelum 2006-01-01 (grup MINVALUE), item dengan tanggal pada atau setelah 2006-01-01 (grup 2006-01-01), dan item tanpa tanggal (grup NULL ).

Dalam setiap grup, hasilnya diurutkan berdasarkan nilai di kolom GROUP ON secara default. Klausa ORDER BY opsional dapat berisi penentu arah asal ASC untuk naik (rendah ke tinggi) atau DESC untuk turun (tinggi ke rendah), dan klausul ORDER IN GROUP BY dapat mengurutkan setiap grup menggunakan aturan yang berbeda. Lihat bagian Grup Pemesanan di bawah ini untuk informasi selengkapnya.

Rentang Grup

Tabel berikut menunjukkan bagaimana hasil dibagi menjadi beberapa grup berdasarkan batas rentang:

Contoh (<kolom> [rentang grup]) Hasil
System.Size [1000, 5000] Hasil dikelompokkan ke dalam empat wadah: MINVALUE: Ukuran < 1000
1000: 1000 <= Ukuran < 5000
5000: Ukuran >= 5000
NULL: Tidak ada nilai untuk Ukuran
System.Author [BEFORE('m'),AFTER('r')] Hasil dikelompokkan ke dalam empat wadah: MINVALUE: Karakter penulis < sebelum "m"
m: karakter sebelum "m" <= Karakter penulis < setelah "r"
r: karakter setelah "r" <= Penulis
NULL: Tidak ada nilai untuk Penulis
System.Author [MINVALUE/'a to l',"m"/'m to z'] Hasil dikelompokkan ke dalam tiga wadah: a ke l: Penulis < "m"
m ke z: "m" <= Penulis
NULL: Tidak ada nilai untuk Penulis
System.DateCreated ['2005-1-01','2006-6-01'] Hasil dikelompokkan ke dalam empat wadah:
MINVALUE: DateCreated < 2005-1-01
2005-1-01: 2005-1-01 <= DateCreated < 2006-6-01
2006-1-01: DateCreated >= 2006-6-01
NULL: Tidak ada nilai untuk DateCreated

 

 

Penting

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

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

 

 

Grup Pelabelan

Untuk meningkatkan keterbacaan, Anda dapat melabeli grup menggunakan sintaks berikut:

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

Label dipisahkan dari batas rentang dengan tanda garis miring dan diapit dalam tanda kutip tunggal. Jika Anda tidak menentukan label, nama grup adalah string batas rentang.

Berikut ini adalah contoh grup pelabelan:

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

Di Windows 7 atau yang lebih baru, Anda juga dapat menggunakan label [OTHER] generik untuk menggabungkan beberapa rentang pengelompokan. Hasil dari semua grup yang diidentifikasi dengan label ini akan digabungkan ke dalam satu grup dengan label ini. Grup hasil ini dikembalikan setelah semua grup lain kecuali untuk grup NULL . Grup NULL berisi hasil untuk item yang tidak memiliki nilai untuk properti yang ditentukan. Sebelum Windows 7, label [OTHER] diperlakukan seperti label grup lainnya.

Kode berikut adalah contoh penggunaan label [OTHER] untuk grup yang akan dibuat di Windows 7 atau yang lebih baru:

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

Tabel berikut ini memperlihatkan grup yang akan dibuat oleh kode pengelompokan sebelumnya di Windows 7 atau yang lebih baru.

Grup System.Author System.FileName
0 1Bill Lorem.docx
Q Queen Ipsum.docx
Robin dolor.docx
Y Zara amet.docx
[LAINNYA] Abner nonummy.docx
Bob laoreet.docx
Xaria magna.docx
NULL aliquam.docx

 

Mengurutkan Grup

Ada tiga cara untuk memesan item dalam grup:

  • Urutan default: Jika Anda tidak menentukan sebaliknya, hasilnya diurutkan berdasarkan nilai di kolom GROUP ON, dalam urutan naik.
  • ORDER BY: Anda dapat menentukan urutan turun dalam klausa ORDER BY. Anda harus mengurutkan hasil berdasarkan kolom GROUP ON.
  • ORDER IN GROUP BY: Anda dapat menentukan urutan yang berbeda untuk setiap grup. Jika Anda mengelompokkan di System.Kind, Anda dapat memesan dokumen berdasarkan System.Author dan musik oleh System.Music.Artist.

Untuk informasi selengkapnya tentang pengurutan hasil, lihat halaman referensi Klausa ORDER BY dan Klausa ORDER IN GROUP .

Grup Berlapis

Anda dapat menumpuk grup dengan beberapa klausa GROUP ON. Urutan yang ditentukan dalam kueri secara langsung tercermin dalam hierarki grup output, seperti yang diperlihatkan dalam contoh berikut.

GROUP ON <System.Kind> 
      OVER (GROUP ON <System.Author> 
                  OVER (SELECT <System.DateCreated>))
System.Kind System.Author System.DateCreated
dokumen Willa 2006-01-02
2006-01-05
Zara 2007-06-02
2007-09-10
Komunikasi Abner 2006-04-16
Jean 2007-02-20
Willa 2006-10-15
Zara 2008-01-02

 

 

Pengelompokan pada Properti Vektor

Pengelompokan pada properti vektor, properti yang dapat berisi satu atau beberapa nilai secara bersamaan, membandingkan nilai vektor satu per satu secara default. Misalnya, jika ada satu dokumen, Lorem.docx, dengan properti System.Author sebagai "Theresa; Zara" dan dokumen lain, Ipsum.docx, dengan properti System.Author sebagai "Zara", kueri mengembalikan tataan hasil dalam dua grup seperti yang ditunjukkan di sini:

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

 

Seperti yang Anda lihat, pengelompokan pada properti vektor mengembalikan baris duplikat. Lorem.docx muncul dua kali karena memiliki dua penulis.

 

Contoh Lainnya

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

Fungsi Agregat

Klausul ORDER BY

Klausa ORDER IN GROUP