Udostępnij za pośrednictwem


GRUPUJ W... NAD... Wypowiedź

GRUPA WŁĄCZONA... NAD... Instrukcja zwraca hierarchiczny zestaw wierszy, w którym wyniki wyszukiwania są podzielone na grupy na podstawie określonej kolumny i opcjonalnych zakresów grupowania. Jeśli grupujesz w kolumnie System.Kind, zestaw wyników jest podzielony na wiele grup: jeden dla dokumentów, jeden dla komunikacji itd. Jeśli grupujesz System.Size i zakres grup 100 KB, zestaw wyników jest podzielony na trzy grupy: elementy o rozmiarze < 100 KB, elementy o rozmiarze >= 100 KB i elementy bez wartości rozmiaru. Grupowania można również agregować za pomocą funkcji.

W tym temacie omówiono następujące tematy:

Składnia

GRUPA W... NAD... instrukcja ma następującą składnię:

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

gdzie zakresy grupowania są definiowane w następujący sposób:

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

Kolumna GROUP ON <> może być zwykłym lub rozdzielonym identyfikatorem dla właściwości w magazynie właściwości.

Opcjonalny zakres grup <> jest listą co najmniej jednej wartości (liczby, daty lub ciągu) używanej do dzielenia wyników na grupy. Limit zakresu <> identyfikuje punkt dzielenia w zwróconym zestawie wyników, a

Pierwsza grupa wyników zawiera elementy z minimalną możliwą wartością dla określonej właściwości do, ale nie uwzględniając pierwszego limitu zakresu. Tę grupę można odwoływać za pomocą słowa kluczowego MINVALUE. Drugą grupę można odwoływać się do specyfikatora limitu zakresu i zawiera elementy, których wartość określonej właściwości jest równa lub większa niż limit zakresu. Wszystkie elementy, które nie mają wartości dla określonej właściwości, są zwracane jako ostatnie i mogą być odwoływane do słowa kluczowego null.

Na przykład: limit zakresu "2006-01-01" dla właściwości System.DateCreated dzieli zestaw wyników na elementy z datami przed 2006-01-01-01 (Grupa MINVALUE), elementy z datami w dniu lub po 2006-01-01 (2006-01-01 grupa) i elementy bez daty (grupa null).

W każdej grupie wyniki są sortowane według wartości w kolumnie GROUP ON domyślnie. Opcjonalna klauzula ORDER BY może zawierać specyfikator kierunku usługi ASC dla rosnącego (niskiego do wysokiego) lub DESC malejącego (wysokiego do niskiego), a klauzula ORDER IN GROUP BY może porządkować każdą grupę przy użyciu różnych reguł. Aby uzyskać więcej informacji, zobacz sekcję Porządkowanie grup poniżej.

Zakresy grup

W poniższej tabeli przedstawiono sposób dzielenia wyników na grupy na podstawie limitów zakresu:

Przykład (<kolumny> [zakresy grup]) Wynik
System.Size [1000, 5000] Wyniki są pogrupowane w cztery zasobniki: MINVALUE: Rozmiar < 1000
1000: 1000 <= rozmiar < 5000
5000: Rozmiar >= 5000
NULL: Brak wartości rozmiaru
System.Author [BEFORE('m'),AFTER('r')] Wyniki są pogrupowane w cztery zasobniki: MINVALUE: Author < znak przed "m"
m: znak przed znakiem "m" <= Author < znak po znaku "r"
r: znak po <"r" = Author
NULL: Brak wartości dla wartości Author
System.Author [MINVALUE/'a to l',"m"/'m to z'] Wyniki są grupowane w trzy zasobniki: do l: Author < "m"
m do z: "m" <= Author
NULL: Brak wartości dla wartości Author
System.DateCreated ['2005-1-01','2006-6-01'] Wyniki są pogrupowane w cztery zasobniki:
MINVALUE: data Tworzenie < 2005-1-01
2005-1-01: 2005-1-01 <= DateCreated < 2006-6-01
2006-1-01: data Tworzenie >= 2006-6-01
NULL: Brak wartości dateCreated

 

 

Ważny

Odpowiedź nieprawidłowa: GROUP ON System.Author['m','z','a']

Odpowiedź prawidłowa: GROUP ON System.Author['a','m','z']

 

 

Grupy etykietowania

Aby zwiększyć czytelność, można etykietować grupy przy użyciu następującej składni:

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

Etykieta jest oddzielona od limitu zakresu znakiem ukośnika i jest ujęta w pojedynczy cudzysłów. Jeśli nie określisz etykiety, nazwa grupy jest ciągiem limitu zakresu.

Poniżej przedstawiono przykład grup etykietowania:

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

W systemie Windows 7 lub nowszym można również użyć ogólnej etykiety [OTHER] do łączenia wielu zakresów grupowania. Wyniki ze wszystkich grup zidentyfikowanych z tą etykietą zostaną połączone w jedną grupę z tą etykietą. Ta grupa wyników jest zwracana po wszystkich innych grupach z wyjątkiem grupy null. Grupa null zawiera wyniki dla elementów, które nie mają wartości dla określonej właściwości. Przed systemem Windows 7 etykieta [OTHER] jest traktowana jak każda inna etykieta grupy.

Poniższy kod to przykład użycia etykiety [OTHER] dla grup, które zostaną utworzone w systemie Windows 7 lub nowszym:

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

W poniższej tabeli przedstawiono grupy, które zostałyby utworzone przez powyższy kod grupowania w systemie Windows 7 lub nowszym.

Grupa System.Author System.FileName
0 1Bill Lorem.docx
Q Królowa Ipsum.docx
Rudzik dolor.docx
Y Zara amet.docx
[INNE] Abner nonummy.docx
Bob laoreet.docx
Xaria magna.docx
null aliquam.docx

 

Porządkowanie grup

Istnieją trzy sposoby zamawiania elementów w grupach:

  • Kolejność domyślna: jeśli nie określisz inaczej, wyniki są uporządkowane według wartości w kolumnie GROUP ON w kolejności rosnącej.
  • ORDER BY: Można określić kolejność malejącą w klauzuli ORDER BY. Wyniki należy uporządkować według kolumny GROUP ON.
  • KOLEJNOŚĆ W GRUPIE WEDŁUG: Można określić inną kolejność dla każdej grupy. Jeśli grupujesz w System.Kind, możesz zamówić dokumenty według System.Author i muzyki przez System.Music.Artist.

Aby uzyskać więcej informacji na temat porządkowania wyników, zobacz klauzuli ORDER BY i ORDER IN GROUP Klauzula stron referencyjnych.

Zagnieżdżanie grup

Grupy można zagnieżdżać za pomocą wielu klauzul GROUP ON. Kolejność określona w zapytaniu jest bezpośrednio odzwierciedlana w hierarchii grup wyjściowych, jak pokazano w poniższym przykładzie.

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

 

 

Grupowanie we właściwościach wektorów

Grupowanie we właściwościach wektorów, właściwości, które mogą zawierać jedną lub więcej wartości jednocześnie, porównuje wartości wektorów indywidualnie. Jeśli na przykład istnieje jeden dokument, Lorem.docx, z właściwością System.Author jako "Theresa; Zara" i inny dokument, Ipsum.docx, z właściwością System.Author jako "Zara", zapytanie zwraca wynik ustawiony w dwóch grupach, jak pokazano poniżej:

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

 

Jak widać, grupowanie we właściwościach wektorów zwraca zduplikowane wiersze. Lorem.docx pojawia się dwa razy, ponieważ ma dwóch autorów.

 

Więcej przykładów

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

funkcje agregujące

KLAUZULA ORDER BY

ORDER IN GROUP, klauzula