이 기사에서는 순위, 집계 및 값 함수로 분류 된 SQL 창 함수를 살펴 봅니다. 실행 총계를 계산할 때 사용법을 자세히 설명하고 다양한 조인 유형과의 성능 영향과 호환성에 대해 설명합니다. 주요 focu
SQL의 창 함수는 현재 행과 관련된 테이블 행 세트에서 계산을 허용하여 표준 집계 기능의 기능을 확장합니다. 그들은 GROUP BY
같은 작은 결과 세트로 행을 그룹화하지 않습니다. 대신, 그것들은 PARTITION BY
및 절차 ORDER BY
정의 된 행의 "창"에서 작동합니다. 세 가지 주요 범주가 있습니다.
ORDER BY
로 명시된 순서에 따라 파티션 내 각 행에 순위 또는 서수 위치를 할당합니다. 예로는 RANK()
, ROW_NUMBER()
, DENSE_RANK()
, NTILE()
이 있습니다. 순서 열에서 동일한 값이있는 경우 RANK()
동일한 순위를 여러 행에 할당 할 수 있으며 ROW_NUMBER()
묶인 경우에도 모든 행에 고유 한 순위를 할당합니다. DENSE_RANK()
간격없이 연속 순위를 할당하며, 넥타이에 할당 된 순위를 건너 뜁니다. NTILE()
은 행을 지정된 수의 그룹으로 나눕니다.SUM
, AVG
, MIN
, MAX
, COUNT
)을 수행합니다. 표준 골재 함수와의 주요 차이점은 각 그룹의 단일 집계 값이 아니라 결과 세트의 각 행 값을 반환한다는 것입니다. 예를 들어, SUM() OVER (PARTITION BY department ORDER BY salary)
급여에 의해 명령 된 각 부서의 급여의 누적 금액을 계산합니다.LAG()
및 LEAD()
는 일반적인 예입니다. 각각 현재 행 앞에서 또는 성공한 행에서 값을 검색합니다. FIRST_VALUE()
및 LAST_VALUE()
창 내에서 첫 번째 및 마지막 값을 검색합니다. 이들은 행의 가치를 이웃과 비교하거나 상황 정보를 찾는 데 유용합니다. 누적 합계라고도하는 실행 합계는 창 함수를 사용하여 쉽게 계산됩니다. 핵심 구성 요소는 절의 적절한 ORDER BY
와 조항과 결합 된 SUM()
집계 창 함수입니다.
열 date
와 amount
있는 sales
라는 테이블이 있다고 가정 해 봅시다. 매일 런닝 총 판매량을 계산합니다.
<code class="sql">SELECT date, amount, SUM(amount) OVER (ORDER BY date) as running_total FROM sales;</code>
이 쿼리는 날짜별로 판매를 주문한 다음 각 행에 대해 SUM(amount) OVER (ORDER BY date)
현재 행까지 모든 행에 대한 amount
계산합니다.
특정 범주 (예 : 제품 범주)로 분할 된 총 실행 합계를 계산하려면 절 PARTITION BY
추가 할 수 있습니다.
<code class="sql">SELECT product_category, date, amount, SUM(amount) OVER (PARTITION BY product_category ORDER BY date) as running_total_by_category FROM sales;</code>
이는 각 product_category
에 대해 별도의 실행 총을 제공합니다.
창 함수는 강력하지만 특히 복잡한 쿼리 또는 대형 데이터 세트에서 쿼리 성능에 영향을 줄 수 있습니다. 성능 영향은 몇 가지 요소에 따라 다릅니다.
PARTITION BY
, 특히 여러 열 또는 비 인덱스 열이 포함 된 ORDER BY
은 처리 시간을 크게 증가시킬 수 있습니다. 효율적인 인덱싱은 성능에 중요합니다.성능 문제를 완화하려면 :
PARTITION BY
에 사용되는 열의 인덱스 및 절로 ORDER BY
인덱스가 필수적입니다.PARTITION BY
하고 ORDER BY
.예, 창 함수는 다른 유형의 조인과 함께 사용할 수 있지만 창 정의를 신중하게 고려해야합니다. Window는 조인 작업 후에 정의됩니다.
예를 들어 customer_id
에 가입 한 두 개의 테이블, orders
및 customers
있는 경우 창 함수를 사용하여 각 고객의 총 주문 값을 계산할 수 있습니다.
<code class="sql">SELECT o.order_id, c.customer_name, o.order_value, SUM(o.order_value) OVER (PARTITION BY c.customer_id) as total_customer_value FROM orders o JOIN customers c ON o.customer_id = c.customer_id;</code>
여기에서는 Window 함수 SUM(o.order_value) OVER (PARTITION BY c.customer_id)
JOIN
작업이 두 테이블의 데이터를 결합한 후 각 고객의 주문 값의 합계를 계산합니다. 절차 PARTITION BY
각 고객에 대해 합계가 별도로 계산되도록합니다. 동일한 원칙은 다른 조인 유형 (왼쪽 조인, 오른쪽 조인, 전체 외부 조인)에 적용됩니다. 키는 Window 기능이 조인에 의해 생성 된 결과 세트에서 작동한다는 것입니다.
위 내용은 SQL의 다른 유형의 창 함수는 무엇입니까 (순위, 집계, 값)?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!