수색…
소개
분석 함수를 사용하여 값 그룹을 기반으로 값을 결정합니다. 예를 들어,이 유형의 함수를 사용하여 누적 합계, 백분율 또는 그룹 내의 상위 결과를 결정할 수 있습니다.
통사론
- FIRST_VALUE (scalar_expression) OVER ([partition_by_clause] order_by_clause [행 _ 범위 절])
- LAST_VALUE (scalar_expression) OVER ([partition_by_clause] order_by_clause [행 _ 범위 절])
- LAG (scalar_expression [, offset] [, default]) OVER ([partition_by_clause] order_by_clause)
- LEAD (scalar_expression [, offset], [default]) OVER ([partition_by_clause] order_by_clause)
- PERCENT_RANK () OVER ([partition_by_clause] order_by_clause)
- CUME_DIST () OVER ([partition_by_clause] order_by_clause)
- PERCENTILE_DISC (numeric_literal) WITHIN GROUP (ORDER BY order_by_expression [ASC | DESC]) OVER ([<partition_by_clause>])
- PERCENTILE_CONT (numeric_literal) WITHIN GROUP (ORDER BY order_by_expression [ASC | DESC]) OVER ([<partition_by_clause>])
FIRST_VALUE
FIRST_VALUE
함수를 사용하여 스칼라 식을 사용하여 식별 한 정렬 된 결과 집합의 첫 번째 값을 결정합니다.
SELECT StateProvinceID, Name, TaxRate,
FIRST_VALUE(StateProvinceID)
OVER(ORDER BY TaxRate ASC) AS FirstValue
FROM SalesTaxRate;
이 예에서 FIRST_VALUE
함수는 세율이 가장 낮은 주 또는 지방의 ID
를 반환하는 데 사용됩니다. OVER
절은 가장 낮은 이자율을 얻기 위해 세율을 명령하는 데 사용됩니다.
StateProvinceID | 이름 | 세율 | FirstValue |
---|---|---|---|
74 | 유타 주 판매 세 | 5.00 | 74 |
36 | 미네소타 주 판매 세 | 6.75 | 74 |
30 | 매사추세츠 주 판매 세 | 7.00 | 74 |
1 | 캐나다 GST | 7.00 | 74 |
57 번 | 캐나다 GST | 7.00 | 74 |
63 | 캐나다 GST | 7.00 | 74 |
LAST_VALUE
LAST_VALUE
함수는 스칼라 표현식을 사용하여 지정하는 정렬 된 결과 세트의 마지막 값을 제공합니다.
SELECT TerritoryID, StartDate, BusinessentityID,
LAST_VALUE(BusinessentityID)
OVER(ORDER BY TerritoryID) AS LastValue
FROM SalesTerritoryHistory;
이 예에서는 LAST_VALUE
함수를 사용하여 각 행 집합의 마지막 값을 정렬 된 값으로 반환합니다.
테리토리 ID | 시작일 | 비즈니스 ID | LastValue |
---|---|---|---|
1 | 2005-07-01 00.00.00.000 | 280 | 283 |
1 | 2006-11-01 00.00.00.000 | 284 | 283 |
1 | 2005-07-01 00.00.00.000 | 283 | 283 |
2 | 2007-01-01 00.00.00.000 | 277 | 275 |
2 | 2005-07-01 00.00.00.000 | 275 | 275 |
삼 | 2007-01-01 00.00.00.000 | 275 | 277 |
LAG 및 LEAD
LAG
함수는 동일한 결과 집합의 현재 행 앞에있는 행에 대한 데이터를 제공합니다. 예를 들어 SELECT
문에서 현재 행의 값과 이전 행의 값을 비교할 수 있습니다.
스칼라 표현식을 사용하여 비교할 값을 지정합니다. offset 매개 변수는 비교에 사용될 현재 행 앞의 행 수입니다. 행 수를 지정하지 않으면 한 행의 기본값이 사용됩니다.
default 매개 변수는 offset의식이 NULL
값을 가질 때 반환되어야하는 값을 지정합니다. 값을 지정하지 않으면 NULL
값이 리턴됩니다.
LEAD
함수는 행 집합의 현재 행 뒤의 행에 대한 데이터를 제공합니다. 예를 들어 SELECT
문에서 현재 행의 값과 다음 행의 값을 비교할 수 있습니다.
스칼라 표현식을 사용하여 비교해야하는 값을 지정합니다. offset 매개 변수는 비교에 사용될 현재 행 뒤의 행 수입니다.
기본 매개 변수를 사용하여 offset의식이 NULL
값을 가질 때 반환해야하는 값을 지정합니다. 이러한 매개 변수를 지정하지 않으면 한 행의 기본값이 사용되며 NULL
값이 반환됩니다.
SELECT BusinessEntityID, SalesYTD,
LEAD(SalesYTD, 1, 0) OVER(ORDER BY BusinessEntityID) AS "Lead value",
LAG(SalesYTD, 1, 0) OVER(ORDER BY BusinessEntityID) AS "Lag value"
FROM SalesPerson;
이 예제에서는 LEAD 및 LAG 함수를 사용하여 BusinessEntityID 열을 기준으로 정렬 된 레코드를 사용하여 위와 아래에 나열된 직원의 날짜와 각 직원의 판매 값을 비교합니다.
BusinessEntityID | SalesYTD | 리드 값 | 래그 값 |
---|---|---|---|
274 | 559697.5639 | 3763178.1787 | 0.0000 |
275 | 3763178.1787 | 4251368.5497 | 559697.5639 |
276 | 4251368.5497 | 3189418.3662 | 3763178.1787 |
277 | 3189418.3662 | 1453719.4653 | 4251368.5497 |
278 | 1453719.4653 | 2315185.6110 | 3189418.3662 |
279 | 2315185.6110 | 1352577.1325 | 1453719.4653 |
PERCENT_RANK 및 CUME_DIST
PERCENT_RANK
함수는 행 집합을 기준으로 한 행의 순위를 계산합니다. 백분율은 현재 행보다 낮은 값을 갖는 그룹의 행 수를 기반으로합니다.
결과 집합의 첫 번째 값의 비율은 항상 0입니다. 집합에서 최상위 또는 최하위 값의 값은 항상 하나입니다.
CUME_DIST
함수는 해당 값보다 작거나 같은 값의 백분율을 판별하여 값 그룹에서 지정된 값의 상대 위치를 계산합니다. 이를 누적 분포라고합니다.
SELECT BusinessEntityID, JobTitle, SickLeaveHours,
PERCENT_RANK() OVER(PARTITION BY JobTitle ORDER BY SickLeaveHours DESC)
AS "Percent Rank",
CUME_DIST() OVER(PARTITION BY JobTitle ORDER BY SickLeaveHours DESC)
AS "Cumulative Distribution"
FROM Employee;
이 예에서는 ORDER
절을 사용하여 직원의 직책에 따라 SELECT
문에서 검색 한 행을 분할하거나 그룹화하며 각 그룹의 결과는 직원이 사용한 병가 시간 수에 따라 정렬됩니다.
BusinessEntityID | JobTitle | SickLeaveHours | 비율 순위 | 누적 분포 |
---|---|---|---|---|
267 | 애플리케이션 전문가 | 57 번 | 0 | 0.25 |
268 | 애플리케이션 전문가 | 56 | 0.333333333333333 | 0.75 |
269 | 애플리케이션 전문가 | 56 | 0.333333333333333 | 0.75 |
272 | 애플리케이션 전문가 | 55 | 1 | 1 |
262 | Cheif 재무 책임자와의 협조 | 48 | 0 | 1 |
239 | 혜택 전문가 | 45 | 0 | 1 |
252 | 사는 사람 | 50 개 | 0 | 0.111111111111111 |
251 | 사는 사람 | 49 | 0.125 | 0.333333333333333 |
256 자 | 사는 사람 | 49 | 0.125 | 0.333333333333333 |
253 | 사는 사람 | 48 | 0.375 | 0.555555555555555 |
254 | 사는 사람 | 48 | 0.375 | 0.555555555555555 |
PERCENT_RANK
기능은 각 그룹 내의 항목의 순위를 매 깁니다. 각 항목에 대해 더 낮은 값을 가진 동일한 그룹의 항목 백분율을 리턴합니다.
CUME_DIST
함수는 현재 값보다 작거나 같은 값의 백분율을 반환한다는 점을 제외하면 비슷합니다.
PERCENTILE_DISC 및 PERCENTILE_CONT
PERCENTILE_DISC
함수는 누적 분포가 numeric_literal
매개 변수를 사용하여 제공 한 백분위 수보다 높은 첫 번째 항목의 값을 나열합니다.
값은 WITHIN GROUP
절에 지정된대로 행 집합 또는 파티션별로 그룹화됩니다.
PERCENTILE_CONT
기능은 비슷합니다 PERCENTILE_DISC
기능,하지만 첫 번째 일치하는 항목과 다음 항목의 합계의 평균을 반환합니다.
SELECT BusinessEntityID, JobTitle, SickLeaveHours,
CUME_DIST() OVER(PARTITION BY JobTitle ORDER BY SickLeaveHours ASC)
AS "Cumulative Distribution",
PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY SickLeaveHours)
OVER(PARTITION BY JobTitle) AS "Percentile Discreet"
FROM Employee;
0.5 백분위 수와 일치하거나 초과하는 행의 정확한 값을 찾으려면 백분율을 PERCENTILE_DISC
함수의 숫자 리터럴로 전달하십시오. 결과 집합의 Percentile Discreet 열은 누적 분포가 지정된 백분위 수보다 높은 행의 값을 나열합니다.
BusinessEntityID | JobTitle | SickLeaveHours | 누적 분포 | 백분위 수 디스크리트 |
---|---|---|---|---|
272 | 애플리케이션 전문가 | 55 | 0.25 | 56 |
268 | 애플리케이션 전문가 | 56 | 0.75 | 56 |
269 | 애플리케이션 전문가 | 56 | 0.75 | 56 |
267 | 애플리케이션 전문가 | 57 번 | 1 | 56 |
PERCENTILE_CONT
함수를 사용하여 값의 집합을 계산합니다. 결과의 "Percentile Continuous"열은 결과 값과 그 다음으로 높은 일치 값의 합계의 평균값을 나열합니다.
SELECT BusinessEntityID, JobTitle, SickLeaveHours,
CUME_DIST() OVER(PARTITION BY JobTitle ORDER BY SickLeaveHours ASC)
AS "Cumulative Distribution",
PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY SickLeaveHours)
OVER(PARTITION BY JobTitle) AS "Percentile Discreet",
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY SickLeaveHours)
OVER(PARTITION BY JobTitle) AS "Percentile Continuous"
FROM Employee;
BusinessEntityID | JobTitle | SickLeaveHours | 누적 분포 | 백분위 수 디스크리트 | 백분위 수 연속 |
---|---|---|---|---|---|
272 | 애플리케이션 전문가 | 55 | 0.25 | 56 | 56 |
268 | 애플리케이션 전문가 | 56 | 0.75 | 56 | 56 |
269 | 애플리케이션 전문가 | 56 | 0.75 | 56 | 56 |
267 | 애플리케이션 전문가 | 57 번 | 1 | 56 | 56 |