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ładni
- zakresy grup
- grup etykietowania
- grup porządkowania
- zagnieżdżanie grup
- grupowanie we właściwościach wektorów
- więcej przykładów
- Tematy pokrewne
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'))))
Tematy pokrewne