GROUP ON ... НАД... утверждение

ГРУППА ON... НАД... оператор возвращает иерархический набор строк, в котором результаты поиска делятся на группы на основе указанного столбца и необязательных диапазонов группирования. Если вы группируете в столбце System.Kind , результирующий набор делится на несколько групп: один для документов, один для обмена данными и т. д. Если вы группировались в system.Size и диапазоне групп 100 КБ, результирующий набор делится на три группы: элементы размером < 100 КБ, элементы размера >= 100 КБ и элементы без значения размера. Можно также агрегировать группировки с функциями.

В этом разделе рассматриваются следующие темы:

Синтаксис

GROUP ON ... НАД... оператор имеет следующий синтаксис:

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

Где диапазоны группирования определяются следующим образом:

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

Столбец> GROUP ON <может быть обычным или разделенным идентификатором для свойства в хранилище свойств.

Необязательный <диапазон> групп — это список одного или нескольких значений (число, дата или строка), используемый для деления результатов на группы. Ограничение <> диапазона определяет точку деления в возвращаемом результирующем наборе и

Первая группа результатов содержит элементы с минимальным возможным значением для указанного свойства, но не включая первое ограничение диапазона. Эта группа может ссылаться на ключевое слово MINVALUE. Вторая группа может быть связана с описательом ограничения диапазона и включает элементы, значение которого для указанного свойства равно или больше предела диапазона. Все элементы, не имеющие значения для указанного свойства, возвращаются последним и могут ссылаться на ключевое слово NULL .

Например, ограничение диапазона "2006-01-01" для свойства System.DateCreated делит результирующий набор на элементы с датами до 2006-01-01 (группа MINVALUE), элементы с датами или после 2006-01-01 (группа 2006-01-01) и элементы без даты (группа NULL ).

В каждой группе результаты сортируются по значениям в столбце GROUP ON по умолчанию. Необязательное предложение ORDER BY может содержать описатель направления asC для возрастания (низкого до высокого) или DESC для убывания (высокого до низкого), а предложение ORDER IN GROUP BY может упорядочивать каждую группу с помощью разных правил. Дополнительные сведения см. в разделе " Группы заказа " ниже.

Диапазоны групп

В следующей таблице показано, как результаты разделены на группы на основе ограничений диапазона:

Пример (<столбец> [диапазоны групп]) Result
System.Size [1000, 5000] Результаты группируются в четыре контейнера: MINVALUE: размер < 1000
1000: 1000<= размер < 5000
5000: Размер >= 5000
НЕДЕЙСТВИТЕЛЬНЫЙ: Нет значения для size
System.Author [BEFORE(m'), AFTER('r')] Результаты группируются в четыре контейнера: MINVALUE: автор < символа до "m"
m: символ до "m" <= автор < символа после "r"
r: символ после "r " <= Author
НЕДЕЙСТВИТЕЛЬНЫЙ: Значение для Author не имеет значения
System.Author [MINVALUE/'a to l',"m"/m to z'] Результаты группируются в три контейнера: a to l: Author < "m"
m до z: "m" <= Author
НЕДЕЙСТВИТЕЛЬНЫЙ: Значение для Author не имеет значения
System.DateCreated ['2005-1-01','2006-6-01'] Результаты группируются в четыре контейнера:
MINVALUE: DateCreated < 2005-1-01
2005-1-01: 2005-1-01<= DateCreated < 2006-6-01
2006-1-01: DateCreated >= 2006-6-01
НЕДЕЙСТВИТЕЛЬНЫЙ: Нет значения для DateCreated

 

 

Это важно

Неправильный: GROUP ON System.Author['m','z','a']

Правильно: GROUP ON System.Author['a','m','z']

 

 

Группы меток

Чтобы улучшить удобочитаемость, группы меток можно использовать следующий синтаксис:

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

Метка отделена от предела диапазона с меткой косой черты и заключена в одинарные кавычки. Если метка не указана, имя группы — это строка ограничения диапазона.

Ниже приведен пример групп меток:

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

В Windows 7 или более поздней версии можно также использовать универсальную метку [OTHER] для объединения нескольких диапазонов группирования. Результаты всех групп, идентифицированных с этой меткой, будут объединены в одну группу с этой меткой. Эта группа результатов возвращается после всех остальных групп, кроме группы NULL . Группа NULL содержит результаты для элементов, не имеющих значения для указанного свойства. До Windows 7 метка [OTHER] обрабатывается как любая другая метка группы.

Следующий код является примером использования метки [OTHER] для групп, которые будут созданы в Windows 7 или более поздней версии:

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

В следующей таблице показаны группы, которые будут созданы предыдущим кодом группирования в Windows 7 или более поздней версии.

Группа Система.Автор System.FileName
0 1Bill Lorem.docx
Q Королева Ipsum.docx
Робин dolor.docx
У Зара amet.docx
[OTHER] Авенир nonummy.docx
Боб laoreet.docx
Xaria magna.docx
NULL aliquam.docx

 

Упорядочение групп

Существует три способа упорядочивания элементов в группах:

  • Порядок по умолчанию: если в противном случае результаты не указаны, результаты упорядочены значениями в столбце GROUP ON в порядке возрастания.
  • ORDER BY: можно указать порядок убывания в предложении ORDER BY. Необходимо упорядочить результаты столбцом GROUP ON.
  • ORDER IN GROUP BY: Можно указать другой порядок для каждой группы. Если вы группируете в System.Kind, вы можете заказать документы по System.Author и музыке System.Music.Artist.

Дополнительные сведения о заказах результатов см. на справочных страницах предложения ORDER BY и ORDER IN GROUP .

Вложенные группы

Можно вложить группы с несколькими предложениями GROUP ON. Порядок, указанный в запросе, напрямую отражается в иерархии выходной группы, как показано в следующем примере.

GROUP ON <System.Kind> 
      OVER (GROUP ON <System.Author> 
                  OVER (SELECT <System.DateCreated>))
System.Kind Система.Автор System.DateCreated
Документы Уилла 2006-01-02
2006-01-05
Зара 2007-06-02
2007-09-10
связь Авенир 2006-04-16
Плотная бумажная ткань 2007-02-20
Уилла 2006-10-15
Зара 2008-01-02

 

 

Группировка по свойствам вектора

Группирование по свойствам векторов, свойства, которые могут содержать одно или несколько значений одновременно, сравнивает значения векторов по умолчанию. Например, если есть один документ, Lorem.docxс свойством System.Author как "Теза; Zara" и другой документ, Ipsum.docx, с свойством System.Author как "Zara", запрос возвращает результирующий набор в двух группах, как показано здесь:

GROUP ON <System.Author> 
      OVER (SELECT <System.FileName>)
Система.Автор System.FileName
Тереза Lorem.docx
Зара Lorem.docx
  Ipsum.docx

 

Как видно, группирование по свойствам вектора возвращает повторяющиеся строки. Lorem.docx появляется дважды, так как он имеет двух авторов.

 

Дополнительные примеры

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

Агрегатные функции

Предложение ORDER BY

Предложение ORDER IN GROUP