CSOPORTOSÍTÁS... FÖLÖTT... állítás

A CSOPORT BE... FÖLÖTT... az utasítás egy hierarchikus sorkészletet ad vissza, amelyben a keresési eredmények adott oszlop és választható csoportosítási tartományok alapján csoportokra vannak osztva. Ha a System.Kind oszlopra csoportosít, az eredményhalmaz több csoportra oszlik: egy a dokumentumokhoz, egyet a kommunikációhoz stb. Ha System.Size és a csoporttartomány 100 KB, az eredményhalmaz három csoportra van osztva: 100 KB < méretű elemek, >= 100 KB méretű elemek és méretérték nélküli elemek. A csoportosításokat függvényekkel is összesítheti.

Ez a témakör a következő témákat ismerteti:

Szintaxis

A GROUP ON ... FÖLÖTT... az utasítás szintaxisa a következő:

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

ahol a csoportosítási tartományok a következőképpen vannak definiálva:

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

A GROUP ON <oszlop> lehet a tulajdonságtároló egyik tulajdonságának rendszeres vagy tagolt azonosítója.

Az opcionális <csoporttartomány-> egy vagy több érték (szám, dátum vagy sztring) listája, amelyet az eredmények csoportokra osztásához használnak. A <tartománykorlát> azonosít egy osztáspontot a visszaadott eredményhalmazban, a

Az eredmények első csoportja olyan elemeket tartalmaz, amelyek a megadott tulajdonsághoz a lehető legkisebb értékkel rendelkeznek, de nem tartalmazzák az első tartománykorlátot. Ez a csoport a MINVALUE kulcsszóval hivatkozható. A második csoport a tartománykorlát-meghatározóval hivatkozható, és magában foglalja azokat az elemeket, amelyeknek a megadott tulajdonság értéke egyenlő vagy nagyobb, mint a tartománykorlát. Minden olyan elem, amely nem rendelkezik a megadott tulajdonság értékével, utoljára lesz visszaadva, és a NULL kulcsszóval hivatkozhat rá.

Például: a System.DateCreated tulajdonsághoz tartozó "2006-01-01" tartománykorlát a 2006.01.01. (MINVALUE csoport), a 2006.01.01-01. dátummal (2006-01-01 csoport) és dátum nélküli elemekkel (NULL csoport).

Az eredmények az egyes csoportokon belül alapértelmezés szerint a GROUP ON oszlop értékei szerint vannak rendezve. Az opcionális ORDER BY záradék a növekvő (alacsonytól a magasig) ASC vagy a DESC irányjelölője lehet csökkenő (magastól alacsonyig), és a ORDER IN GROUP BY záradék különböző szabályokkal rendelheti meg az egyes csoportokat. További információt az alábbi Rendelési csoportok című szakaszban talál.

Csoporttartományok

Az alábbi táblázat bemutatja, hogyan vannak az eredmények csoportokra osztva a tartománykorlátok alapján:

Példa (<oszlop> [csoporttartományok]) Eredmény
System.Size [1000, 5000] Az eredmények négy gyűjtőbe vannak csoportosítva: MINVALUE: Méret < 1000
1000: 1000 <= Méret < 5000
5000: Méret >= 5000
NULL: Nincs érték a mérethez
System.Author [BEFORE('m'),AFTER('r')] Az eredmények négy gyűjtőbe vannak csoportosítva: MINVALUE: Author < character before "m"
m: karakter előtt "m" <= Szerző < karakter után "r"
r: karakter után "r" <= Szerző
NULL: Nincs érték a szerző számára
System.Author [MINVALUE/'a to l',"m"/'m to z] Az eredmények három gyűjtőbe vannak csoportosítva: a–l: Szerző < "m"
m–z: "m" <= Szerző
NULL: Nincs érték a szerző számára
System.DateCreated [2005-1-01','2006-6-01] Az eredmények négy gyűjtőbe vannak csoportosítva:
MINVALUE: DateCreated < 2005-1-01
2005-1-01: 2005-1-01 <= DateCreated < 2006-6-01
2006-1-01: DateCreated >= 2006-6-01
NULL: Nincs érték a DateCreated értékhez

 

 

Fontos

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

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

 

 

Címkézési csoportok

Az olvashatóság javítása érdekében a következő szintaxissal címkézheti a csoportokat:

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

A címke perjellel elválasztva van a tartománykorláttól, és egyetlen idézőjelben van ellátva. Ha nem ad meg címkét, a csoport neve a tartománykorlát sztringje.

Az alábbiakban egy példa látható a címkézési csoportokra:

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

A Windows 7 vagy újabb verziókban egy általános [EGYÉB] címkével is kombinálhat több csoportosítási tartományt. Az ezzel a címkével azonosított összes csoport eredményei egyetlen csoportba lesznek kombinálva ezzel a címkével. Ez az eredménycsoport az összes többi csoport után lesz visszaadva, kivéve a NULL csoportot. A NULL csoport olyan elemek eredményeit tartalmazza, amelyek nem rendelkeznek a megadott tulajdonság értékével. A Windows 7 előtt az [EGYÉB] címke minden más csoportcímkéhez hasonlóan lesz kezelve.

Az alábbi kód az [OTHER] címkét használja a Windows 7-ben vagy újabb rendszerben létrehozott csoportokhoz:

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

Az alábbi táblázat azokat a csoportokat mutatja be, amelyeket az előző csoportosítási kód hozna létre Windows 7 vagy újabb rendszerben.

Csoport System.Author System.FileName
0 1Bill Lorem.docx
Q Királynő Ipsum.docx
Vörösbegy dolor.docx
Y Zara amet.docx
[EGYÉB] Abner nonummy.docx
Úszó laoreet.docx
Xaria magna.docx
NULL aliquam.docx

 

Csoportok megrendelése

A csoportok elemeit háromféleképpen rendezheti:

  • Alapértelmezett rendezés: Ha másként nem adja meg, az eredményeket a GROUP ON oszlop értékei rendezik növekvő sorrendben.
  • ORDER BY: Az ORDER BY záradékban csökkenő sorrendet adhat meg. Az eredményeket a GROUP ON oszlop szerint kell rendeznie.
  • SORREND CSOPORTOSÍTÁS SZERINT: Minden csoporthoz megadhat egy másik sorrendet. Ha a System.Kind csoportosítja, akkor a System.Music.Artist System.Author és zene alapján is megrendelheti a dokumentumokat.

Az eredmények sorrendjéről további információt a ORDER BY záradék és ORDER IN GROUP Záradék referenciaoldalakon talál.

Csoportok beágyazása

Több GROUP ON záradékkal is beágyazhat csoportokat. A lekérdezésben megadott sorrend közvetlenül tükröződik a kimeneti csoport hierarchiájában, ahogy az az alábbi példában is látható.

GROUP ON <System.Kind> 
      OVER (GROUP ON <System.Author> 
                  OVER (SELECT <System.DateCreated>))
System.Kind System.Author System.DateCreated
Dokumentumok Willa 2006-01-02
2006-01-05
Zara 2007-06-02
2007-09-10
távközlés Abner 2006-04-16
Jean 2007-02-20
Willa 2006-10-15
Zara 2008-01-02

 

 

Csoportosítás vektortulajdonságokon

A vektortulajdonságok csoportosítása, amelyek egyszerre egy vagy több értéket tartalmazhatnak, alapértelmezés szerint egyenként hasonlítják össze a vektorértékeket. Ha például van egy dokumentum, Lorem.docx, és a System.Author tulajdonság "Theresa; Zara" és egy másik dokumentum, Ipsum.docxa System.Author tulajdonsággal "Zara" néven, a lekérdezés az itt látható módon két csoportban adja vissza az eredményt:

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

 

Mint látható, a vektortulajdonságokra való csoportosítás ismétlődő sorokat ad vissza. Lorem.docx kétszer jelenik meg, mert két szerzője van.

 

További példák

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

összesítő függvények

ORDER BY záradék

ORDER IN GROUP záradék