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에서 창 함수를 사용하면 몇 가지 이점이 있습니다.
예를 들어, 각 부서에서 최고 수준의 최고급 직원을 찾으려면 다음과 같습니다.
<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에서 쿼리 성능을 향상시킬 수 있습니다. 방법은 다음과 같습니다.
그러나 성능 영향은 특정 사용 사례 및 데이터 분포에 따라 다를 수 있습니다. 일부 시나리오에서는 특히 데이터 세트가 작거나 창 작업이 복잡한 경우 창 함수가 상당한 성능 향상을 제공하지 않을 수 있습니다.
예를 들어, 전날의 판매 차이를 계산하기위한 쿼리를 고려하십시오.
<code class="sql">SELECT date, sales, sales - LAG(sales) OVER (ORDER BY date) AS sales_difference FROM sales_data;</code>
이 쿼리는 LAG
기능을 사용하여 전날과의 판매를 비교하여 자체 합의를 사용하는 것보다 더 효율적일 수 있습니다.
창 함수는 강력하지만 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!