> 데이터 베이스 > SQL > SQL의 다른 유형의 창 함수는 무엇입니까 (순위, 집계, 값)?

SQL의 다른 유형의 창 함수는 무엇입니까 (순위, 집계, 값)?

Robert Michael Kim
풀어 주다: 2025-03-11 18:27:50
원래의
465명이 탐색했습니다.

이 기사에서는 순위, 집계 및 값 함수로 분류 된 SQL 창 함수를 살펴 봅니다. 실행 총계를 계산할 때 사용법을 자세히 설명하고 다양한 조인 유형과의 성능 영향과 호환성에 대해 설명합니다. 주요 focu

SQL의 다른 유형의 창 함수는 무엇입니까 (순위, 집계, 값)?

SQL의 다른 유형의 창 함수는 무엇입니까 (순위, 집계, 값)?

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() 창 내에서 첫 번째 및 마지막 값을 검색합니다. 이들은 행의 가치를 이웃과 비교하거나 상황 정보를 찾는 데 유용합니다.

창 함수를 사용하여 SQL에서 총 실행 합계를 계산하려면 어떻게합니까?

누적 합계라고도하는 실행 합계는 창 함수를 사용하여 쉽게 계산됩니다. 핵심 구성 요소는 절의 적절한 ORDER BY 와 조항과 결합 된 SUM() 집계 창 함수입니다.

dateamount 있는 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 에 대해 별도의 실행 총을 제공합니다.

복잡한 SQL 쿼리에서 창 함수를 사용하는 성능은 무엇입니까?

창 함수는 강력하지만 특히 복잡한 쿼리 또는 대형 데이터 세트에서 쿼리 성능에 영향을 줄 수 있습니다. 성능 영향은 몇 가지 요소에 따라 다릅니다.

  • 데이터 볼륨 : 대규모 데이터 세트를 처리하려면 더 많은 리소스가 필요하며 각 행에 대한 행 창에 액세스하고 처리 해야하는 창 함수는 계산적으로 비용이 많이들 수 있습니다.
  • 창 정의 : 조항 PARTITION BY , 특히 여러 열 또는 비 인덱스 열이 포함 된 ORDER BY 은 처리 시간을 크게 증가시킬 수 있습니다. 효율적인 인덱싱은 성능에 중요합니다.
  • 쿼리 복잡성 : 창 함수를 조인 또는 하위 쿼리와 같은 다른 작업과 결합하면 처리 오버 헤드가 더욱 증가 할 수 있습니다.
  • 데이터베이스 시스템 : 다른 데이터베이스 시스템은 창 함수 실행을 다르게 최적화합니다. 일부 시스템은 다른 시스템보다 더 효율적으로 처리 할 수 ​​있습니다.

성능 문제를 완화하려면 :

  • 적절한 인덱싱 확인 : PARTITION BY 에 사용되는 열의 인덱스 및 절로 ORDER BY 인덱스가 필수적입니다.
  • 창 정의 최적화 : 가능한 한 간단하게 조항 PARTITION BY 하고 ORDER BY .
  • 대체 접근법을 고려하십시오. 경우에 따라 대체 쿼리 구조 또는 사전 응집이 더 효율적 일 수 있습니다.
  • 쿼리 실행 계획 분석 : 데이터베이스 도구를 사용하여 쿼리 실행 계획을 분석하여 병목 현상을 식별하고 그에 따라 최적화하십시오.

SQL에서 다른 유형의 조인과 함께 창 함수를 사용할 수 있습니까?

예, 창 함수는 다른 유형의 조인과 함께 사용할 수 있지만 창 정의를 신중하게 고려해야합니다. Window는 조인 작업 후에 정의됩니다.

예를 들어 customer_id 에 가입 한 두 개의 테이블, orderscustomers 있는 경우 창 함수를 사용하여 각 고객의 총 주문 값을 계산할 수 있습니다.

 <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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿