> 데이터 베이스 > MySQL 튜토리얼 > MySQL에서 창 함수를 어떻게 사용합니까?

MySQL에서 창 함수를 어떻게 사용합니까?

Johnathan Smith
풀어 주다: 2025-03-21 11:59:34
원래의
844명이 탐색했습니다.

MySQL에서 창 함수를 어떻게 사용합니까?

MySQL의 창 함수는 현재 행과 관련된 행 세트에서 계산을 수행하는 데 사용됩니다. 이는 집계 함수와 마찬가지로 결과를 단일 출력 행으로 붕괴시키지 않고 수행됩니다. 대신, Window 함수는 OVER 절에 의해 정의 된 창 또는 행의 프레임을 기반으로 원래 결과 세트의 모든 행에 대한 값을 반환합니다.

다음은 MySQL에서 창 함수를 사용하는 방법에 대한 기본 예입니다.

 <code class="sql">SELECT employee_id, salary, AVG(salary) OVER (PARTITION BY department_id) AS avg_salary_by_dept FROM employees;</code>
로그인 후 복사

이 예에서 AVG 함수는 각 부서 내의 평균 급여를 계산합니다 (절의 PARTITION BY 에 의해 정의 된대로). OVER 절은 함수가 적용되는 창을 지정합니다.

창 함수의 주요 구성 요소는 다음과 같습니다.

  • 함수 : 창 함수 자체 (예 :, ROW_NUMBER() , RANK() , DENSE_RANK() , SUM() , AVG() 등).
  • 오버 절 : 이것은 창 함수에 필수적이며 함수가 적용되는 창을 정의합니다. 포함 할 수 있습니다.

    • PARTITION BY : 설정 세트를 함수가 적용되는 파티션으로 나눕니다.
    • ORDER BY : 파티션 내에서 행 순서를 정의합니다.
    • ROWS 또는 RANGE : 현재 행과 관련하여 행의 프레임을 지정합니다.

예를 들어, 날짜까지 총 판매량을 얻으려면 다음과 같습니다.

 <code class="sql">SELECT date, sales, SUM(sales) OVER (ORDER BY date) AS running_total FROM sales_data;</code>
로그인 후 복사

이 경우 SUM 창 함수이며, OVER (ORDER BY date) 창을 결과 세트의 시작부터 날짜별로 현재 행까지 모든 행으로 정의합니다.

데이터 분석을 위해 MySQL에서 창 함수를 사용하면 어떤 이점이 있습니까?

데이터 분석을 위해 MySQL에서 창 함수를 사용하면 몇 가지 이점이 있습니다.

  1. 가독성 및 유지 보수성 향상 : 창 함수는 자체 요인 또는 하위 쿼리가 필요한 복잡한 쿼리를 단순화 할 수 있습니다. 이로 인해 SQL 코드를 클리너하고 유지 관리하기가 더 쉬워집니다.
  2. 향상된 분석 기능 : 데이터를 그룹화하지 않고 총 실행, 이동 평균 및 순위와 같은 고급 계산을 허용합니다. 이는 시계열 분석, 추세 분석 및 기타 데이터 중심 작업에 중요합니다.
  3. 효율적인 데이터 처리 : 창 함수는 하위 쿼리 또는 조인을 사용하는 등가 쿼리보다 데이터를보다 효율적으로 처리 할 수 ​​있습니다. 데이터베이스 엔진은 창 작동을 위해 특별히 설계된 최적화 된 알고리즘을 활용할 수 있습니다.
  4. 데이터 프리젠 테이션의 유연성 : 분석가는 기본 구조를 변경하지 않고 다양한 형식으로 데이터를 제시 할 수 있습니다. 예를 들어, 백분위 수, 누적 합계를 계산하거나 이동 평균과 비교하는 것은 단일 쿼리 내에서 수행 할 수 있습니다.
  5. 자세한 통찰력 : 데이터를 분할하고 다른 세그먼트에 대한 기능을 적용함으로써 분석가는 전반적인 맥락을 잃지 않고 특정 데이터 하위 집합에 대한 통찰력을 얻을 수 있습니다.

예를 들어, 각 부서에서 최고 수준의 최고급 직원을 찾으려면 다음과 같습니다.

 <code class="sql">SELECT department_id, employee_id, salary, ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rank_within_dept FROM employees WHERE rank_within_dept </code>
로그인 후 복사

MySQL에서 Window 기능이 쿼리 성능을 향상시킬 수 있습니다. 그렇다면 어떻게합니까?

예, 창 함수는 MySQL에서 쿼리 성능을 향상시킬 수 있습니다. 방법은 다음과 같습니다.

  1. 쿼리 복잡성 감소 : 창 함수는 복잡한 하위 쿼리와자가 요인을 대체하여 쿼리의 전반적인 복잡성을 줄일 수 있습니다. 더 간단한 쿼리가 일반적으로 실행하는 것이 더 빠르기 때문에 성능 향상으로 이어질 수 있습니다.
  2. 최적화 된 실행 계획 : MySQL의 쿼리 옵티마이저는 창 함수를 사용하는 쿼리에 대한보다 효율적인 실행 계획을 생성 할 수 있습니다. 이는 창 함수가 여러 조인 또는 하위 쿼리보다 데이터 세트에서 더 효율적으로 작동하도록 설계 되었기 때문입니다.
  3. 단일 패스 데이터 : 경우에 따라 Window 함수를 사용하면 데이터베이스가 데이터를 통한 단일 패스에서 계산을 수행 할 수 있습니다. 예를 들어, 윈도우 함수로 실행 총계를 계산하는 것은 일반적으로 자체 교육을 사용하는 것보다 더 효율적입니다.
  4. 색인 사용 : 창 함수와 결합 된 적절한 인덱싱은 성능을 향상시킬 수 있습니다. MySQL은 인덱스를 활용하여 데이터를보다 효율적으로 정렬하고 분할 할 수 있으며 이는 창 기능 작업에 유리합니다.

그러나 성능 영향은 특정 ​​사용 사례 및 데이터 분포에 따라 다를 수 있습니다. 일부 시나리오에서는 특히 데이터 세트가 작거나 창 작업이 복잡한 경우 창 함수가 상당한 성능 향상을 제공하지 않을 수 있습니다.

예를 들어, 전날의 판매 차이를 계산하기위한 쿼리를 고려하십시오.

 <code class="sql">SELECT date, sales, sales - LAG(sales) OVER (ORDER BY date) AS sales_difference FROM sales_data;</code>
로그인 후 복사

이 쿼리는 LAG 기능을 사용하여 전날과의 판매를 비교하여 자체 합의를 사용하는 것보다 더 효율적일 수 있습니다.

MySQL에서 창 함수를 구현할 때 고려해야 할 제한 사항이나 특정 사용 사례가 있습니까?

창 함수는 강력하지만 MySQL에서 구현할 때 고려해야 할 제한 사항과 특정 사용 사례가 있습니다.

  1. 버전 호환성 : 창 함수는 MySQL 8.0에 도입되었습니다. 이전 버전을 사용하는 경우이 기능에 액세스 할 수 없습니다.
  2. 성능 오버 헤드 : 매우 큰 데이터 세트 또는 복잡한 윈도우 작업의 경우 성능 오버 헤드가있을 수 있습니다. 쿼리를 테스트하고 최적화하는 것이 중요합니다.
  3. 메모리 사용 : 창 함수는 특히 큰 결과 세트를 정렬하는 경우 메모리 집약적 일 수 있습니다. 이것은 자원으로 제한된 환경에서 고려해야합니다.
  4. 제한된 기능 : MySQL의 창 함수 지원은 다른 데이터베이스 시스템만큼 포괄적이지 않습니다. 예를 들어, MySQL은 OVER 절 내에서 프레임을 정의하기위한 ROWS 또는 RANGE 조항을 지원하지 않습니다.

창 함수가 특히 유용한 특정 사용 사례는 다음과 같습니다.

  • 시계열 분석 : 이동 평균 계산, 총계 실행 또는 과거 데이터에 대한 현재 값 비교.

     <code class="sql">SELECT date, sales, AVG(sales) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg_3_days FROM sales_data;</code>
    로그인 후 복사
  • 순위 및 백분위 수 계산 : 그룹 내에서 최고 성능을 식별하거나 백분위 수 순위를 계산합니다.

     <code class="sql">SELECT employee_id, salary, PERCENT_RANK() OVER (ORDER BY salary) AS percentile_rank FROM employees;</code>
    로그인 후 복사
  • 누적 집계 : 시간이 지남에 따라 또는 파티션 내에서 누적 합 또는 수를 추적합니다.

     <code class="sql">SELECT product_id, date, quantity, SUM(quantity) OVER (PARTITION BY product_id ORDER BY date) AS cumulative_quantity FROM inventory;</code>
    로그인 후 복사
  • 비교 분석 : 값 비교 그룹 평균 또는 총계.

     <code class="sql">SELECT department_id, employee_id, salary, salary - AVG(salary) OVER (PARTITION BY department_id) AS salary_vs_dept_avg FROM employees;</code>
    로그인 후 복사

요약하면 MySQL의 창 함수는 강력한 분석 기능을 제공하지만 특정 사용 사례 및 데이터 특성에 따라 한계를 이해하고 사용을 최적화하는 것이 중요합니다.

위 내용은 MySQL에서 창 함수를 어떻게 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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