SQL OVER () 절-언제 그리고 왜 유용합니까?

그러므로 간단히 말하면 Over 절을 사용하여 집계 된 값과 함께 집계되지 않은 값을 선택할 수 있습니다.

Partition BY, ORDER BY inside 및 ROWS 또는 RANGE는 OVER () by 절의 일부입니다.

partition by는 데이터를 분할 한 다음 이러한 창, 집계 함수를 수행하는 데 사용됩니다. 그러면 전체 결과 집합에 의해 분할되는 것은 단일 분할로 간주됩니다.

OVER 절의 기본 구문 참조

PARTITION BY : 데이터를 분할하고 동일한 데이터를 가진 그룹에 대해 작업을 수행하는 데 사용됩니다.

ORDER BY : 파티션에서 데이터의 논리적 순서를 정의하는 데 사용됩니다. 파티션을 지정하지 않으면 전체 결과 집합이 단일 파티션으로 간주됩니다.

: 작업을 수행 할 때 파티션에서 고려할 행을 지정하는 데 사용할 수 있습니다.

예를 들어 보겠습니다.

다음은 내 데이터 세트입니다.

여러 시나리오를 실행하고 데이터가 어떻게 영향을 받는지 살펴 보겠습니다. 어려운 구문에서 단순하게 one

sum_sal 부분 만 확인하세요. 여기서는 Salary 별 주문을 사용하고 “RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW”를 사용합니다.이 경우 파티션을 사용하지 않으므로 전체 데이터가 하나로 처리됩니다. 여기서 중요한 것은 UNBOUNDED PRECEDING AND CURRENT ROW입니다. 즉, 각 행의 시작 행에서 현재 행까지 합계를 계산할 때 급여가 5000이고 이름이있는 행이 표시되면 = “Pavan”, 이상적으로는 17000이어야하고 salary = 5000 및 name = Mark의 경우 22000이어야합니다. 그러나 RANGE를 사용하고 있으며이 경우에는 s가 발견되면 유사한 요소는 동일한 논리적 그룹으로 간주하고 작업을 수행하고 해당 그룹의 각 항목에 값을 할당합니다. 그것이 우리가 급여 = 5000에 대해 동일한 값을 갖는 이유입니다. 엔진은 salary = 5000 및 Name = Ron으로 올라가서 합계를 계산 한 다음 모든 salary = 5000에 할당했습니다.

따라서 ROWS BETWEEN UNBOUNDED PRECEDING 및 CURRENT ROW의 경우 차이가 함께 그룹화하여 시작 행에서 현재 행까지 SUM을 계산하며 “RANGE와 같이 동일한 값을 가진 항목을 다르게 처리하지 않습니다.

이 결과는

오버 (월급 별 주문)는 오버 (월급 별 주문 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)의 지름길이기 때문에 ROWS 또는 RANGE없이 간단히 Order by를 지정합니다. RANGE는 UNBOUNDED PRECEDING과 CURRENT ROW의 기본값입니다.

참고 : 이는 실제로 RANGE / ROW를 허용하는 함수에만 적용 할 수 있습니다. 예를 들어 ROW_NUMBER와 다른 소수는 RANGE / ROW를 허용하지 않습니다. , 이것은 그림에 나오지 않습니다.

지금까지 우리는 order by가있는 Over 절이 Range / ROWS를 취하고 구문이 약간 다르게 보이는 것을 보았습니다. UNBOUNDED PRECEDING과 CURRENT ROW 사이의 범위와 같은 hing 그리고 실제로 첫 번째 행에서 현재 행까지 계산합니다. 그러나 데이터의 전체 파티션에 대한 값을 계산하고 각 열 (즉, 첫 번째 행에서 마지막 행까지)에 대해 값을 계산하려면 어떻게해야합니까? 여기에 대한 쿼리가 있습니다.

CURRENT ROW 대신 UNBOUNDED FOLLOWING을 지정하여 엔진이 각 행에 대한 파티션의 마지막 레코드까지 계산하도록 지시합니다.

이제 귀하의 빈 중괄호가있는 OVER () 란 무엇입니까?

Over (UnBOUNDED PRECEDING과 UNBOUNDED FOLLOWING 사이의 급여 ROWS에 의한 순서)

여기서 간접적으로 지정합니다. 내 모든 결과 집합을 단일 파티션으로 취급 한 다음 첫 번째 레코드부터 각 파티션의 마지막 레코드까지 계산을 수행합니다.

이 동영상을 만들었으며 관심이 있으시면 방문 할 수 있습니다. https://www.youtube.com/watch?v=CvVenuVUqto&t=1177s

감사합니다 .Pavan Kumar AryasomayajuluHTTP : //xyzcoder.github.io

Write a Comment

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다