GROUP ON ... OVER ... 문
그룹 켜기... 이상... 문은 검색 결과가 지정된 열 및 선택적 그룹화 범위에 따라 그룹으로 구분되는 계층적 행 집합을 반환합니다. System.Kind 열에서 그룹화하면 결과 집합은 문서용 그룹, 통신용 그룹 등 여러 그룹으로 나뉩니다. System.Size 및 그룹 범위 100KB에서 그룹화하면 결과 집합은 크기가 100KB인 항목, 크기 < 가 100KB인 항목 및 크기 >값이 없는 항목의 세 그룹으로 나뉩니다. 함수를 사용하여 그룹화도 집계할 수 있습니다.
이 항목에서는 다음 주제에 대해 설명합니다.
Syntax
그룹 켜기 ... 이상 ... 문에는 다음 구문이 있습니다.
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 키워드(keyword) 참조할 수 있습니다. 두 번째 그룹은 범위 제한 지정자 자체를 사용하여 참조할 수 있으며 지정된 속성의 값이 범위 제한보다 크거나 같은 항목을 포함합니다. 지정된 속성에 대한 값이 없는 항목은 마지막으로 반환되며 NULL 키워드(keyword) 참조할 수 있습니다.
예를 들어 System.DateCreated 속성의 범위 제한 '2006-01-01'은 결과 집합을 2006-01-01(MINVALUE 그룹) 이전 날짜가 있는 항목, 날짜가 2006-01-01(2006-01-01 그룹) 이후인 항목 및 날짜(NULL 그룹)가 없는 항목으로 나눕니다.
각 그룹 내에서 결과는 기본적으로 GROUP ON 열의 값을 기준으로 정렬됩니다. 선택적 ORDER BY 절은 오름차순(낮음에서 높음) 또는 내림차순(높음에서 낮음)의 DESC 방향 지정자를 포함할 수 있으며 ORDER IN GROUP BY 절은 서로 다른 규칙을 사용하여 각 그룹을 정렬할 수 있습니다. 자세한 내용은 아래 의 주문 그룹 섹션을 참조하세요.
그룹 범위
다음 표에서는 범위 제한을 기반으로 결과를 그룹으로 나누는 방법을 보여 줍니다.
예제(<열> [그룹 범위]) | 결과 |
---|---|
System.Size [1000, 5000] | 결과는 4개의 버킷으로 그룹화됩니다. MINVALUE: 크기 < 1000 1000: 1000 <= 크기 < 5000 5000: 크기 >= 5000 Null: Size에 대한 값 없음 |
System.Author [BEFORE('m'),AFTER('r')] | 결과는 네 개의 버킷으로 그룹화됩니다. MINVALUE: "m" 앞의 작성자 < 문자 m: "m" <앞의 문자 = "r" 뒤에 있는 작성자 < 문자 r: 문자 뒤에 "r" <= Author Null: 작성자 값 없음 |
System.Author [MINVALUE/'a to l',"m"/'m to z'] | 결과는 세 개의 버킷으로 그룹화됩니다. a to l: Author < "m" m에서 z까지: "m" <= Author Null: 작성자 값 없음 |
System.DateCreated ['2005-1-01','2006-6-01'] | 결과는 4개의 버킷으로 그룹화됩니다. 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 이전에는 [OTHER] 레이블이 다른 그룹 레이블처럼 처리됩니다.
다음 코드는 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 |
Robin | dolor.docx | |
Y | 자라 | amet.docx |
[기타] | Abner | nonummy.docx |
Bob | laoreet.docx | |
Xaria | magna.docx | |
NULL | aliquam.docx |
그룹 순서 지정
다음 세 가지 방법으로 그룹으로 항목을 정렬할 수 있습니다.
- 기본 순서 지정: 달리 지정하지 않으면 결과는 GROUP ON 열의 값에 따라 오름차순으로 정렬됩니다.
- ORDER BY: ORDER BY 절에서 내림차순을 지정할 수 있습니다. GROUP ON 열을 기준으로 결과를 정렬해야 합니다.
- ORDER IN GROUP BY: 각 그룹에 대해 다른 순서를 지정할 수 있습니다. System.Kind에서 그룹화하면 System.Author 및 Music by 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'))))
관련 항목