The GROUP ON...多。。。语句返回分层行集,其中搜索结果根据指定的列和可选的分组范围划分为组。 如果在 system.Kind 列中对 分组,则结果集分为多个组:一个用于文档、一个用于通信等。 如果分组 System.Size 和组范围 100 KB,则结果集分为三个组:大小 < 100 KB 的项目、大小 >= 100 KB 的项目以及没有大小值的项。 还可以使用函数聚合分组。
本主题涵盖以下主题:
语法
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 关键字引用。
例如, System.DateCreated 属性的范围限制为“2006-01-01”,将结果集划分为日期为 2006-01-01 之前的项 (MINVALUE 组)、日期在 2006-01-01(2006-01-01 组)之后的项目,以及没有日期的项目(NULL 组)。
在每个组中,结果默认按 GROUP ON 列中的值进行排序。 可选的 ORDER BY 子句可以包含 ASC 的升序(低到高)或 DESC 的一个方向说明符(降序(高到低),ORDER IN GROUP BY 子句可以使用不同的规则对每个组进行排序。 有关详细信息,请参阅下面的 排序组 部分。
组范围
下表演示了如何根据范围限制将结果划分为组:
| 示例(<列> [组范围]) | 结果 |
|---|---|
| System.Size [1000, 5000] | 结果分为四个存储桶:MINVALUE:大小 < 1000 1000: 1000 <= 大小 < 5000 5000: 大小 >= 5000 NULL: 没有大小值 |
| System.Author [BEFORE('m'),AFTER('r')] | 结果分为四个存储桶:MINVALUE:“m”之前的作者 < 字符 < 字符 = “r” 后作者 < 字符 r: “r” <= Author 之后的字符 NULL: Author 没有值 |
| System.Author [MINVALUE/'a to l',“m”/'m to z'] | 结果分为三个存储桶:a 到 l: Author <“m” m 到 z:“m”<= Author NULL: 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 NULL: 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 之前,将像对待任何其他组标签一样对待 [其他] 标签。
以下代码是对将在 Windows 7 或更高版本中创建的组使用 [OTHER] 标签的示例:
GROUP ON System.Author ['0', 'A'/'[OTHER]', 'I', 'Q', 'W'/'[OTHER]', 'Y']
OVER (SELECT System.DateCreated FROM SystemIndex)
下表显示了将由 Windows 7 或更高版本中的上述分组代码创建的组。
| 群 | System.Author | System.FileName |
|---|---|---|
| 0 | 1Bill | Lorem.docx |
| Q | 女王 | Ipsum.docx |
| 知更鸟 | dolor.docx | |
| Y | 扎拉 | amet.docx |
| [其他] | Abner | 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.Author | System.DateCreated |
|---|---|---|
| 文件 | 威拉 | 2006-01-02 |
| 2006-01-05 | ||
| 扎拉 | 2007-06-02 | |
| 2007-09-10 | ||
| 通信 | Abner | 2006-04-16 |
| 珍 | 2007-02-20 | |
| 威拉 | 2006-10-15 | |
| 扎拉 | 2008-01-02 |
对向量属性进行分组
在矢量属性上分组,可以同时包含一个或多个值的属性默认情况下单独比较向量值。 例如,如果有一个文档,Lorem.docx,System.Author 属性为“Theresa;Zara“和另一个文档,Ipsum.docx,System.Author 属性为”Zara“,查询将返回两个组中的结果集,如下所示:
GROUP ON <System.Author>
OVER (SELECT <System.FileName>)
| System.Author | 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'))))
相关主题