> 데이터 베이스 > MySQL 튜토리얼 > 8.0 이전 MySQL 버전에서 누적 합계를 계산하는 방법은 무엇입니까?

8.0 이전 MySQL 버전에서 누적 합계를 계산하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-02 22:51:38
원래의
902명이 탐색했습니다.

How to Calculate Running Totals in MySQL Versions Prior to 8.0?

MySQL에서 행 집합에 대한 누적 합계 계산

집합 전체에서 특정 열에 대한 누적 합계를 구하는 작업에 직면했습니다. MySQL의 행 수. 문제는 MySQL 8.0 이전 버전에는 분석 기능이 내장되어 있지 않다는 점입니다.

사용자 변수를 사용한 접근 방식

이런 상황에서는 사용자 변수를 사용할 수 있습니다. 분석 기능의 기능을 에뮬레이트합니다. 여기에는 원래 쿼리를 다른 쿼리로 래핑하고 ORDER BY를 활용하여 행을 순차적으로 처리하는 작업이 포함됩니다.

외부 쿼리는 현재 행의 id 및 day 값이 이전 행의 값과 일치하는지 확인합니다. 그렇다면 현재 행의 금액을 추가하여 누적 합계가 업데이트됩니다. 그렇지 않은 경우 누적 합계가 재설정되고 현재 행의 금액으로 설정됩니다.

예제 쿼리

다음은 이 접근 방식을 보여주는 예제 쿼리입니다.

SELECT IF(@prev_id = c.id AND @prev_day = c.day,
         @cumtotal := @cumtotal + c.amount,
         @cumtotal := c.amount) AS cumulative_total
     , @prev_id  := c.id  AS `id`
     , @prev_day := c.day AS `day`
     , c.hr
     , c.amount AS `amount'
  FROM ( SELECT @prev_id  := NULL
              , @prev_day := NULL
              , @subtotal := 0
       ) i
  JOIN (
         select id, day, hr, amount from
         ( //multiple joins on multiple tables)a
         left join
         (//unions on multiple tables)b
         on a.id=b.id
         ORDER BY 1,2,3
       ) c
로그인 후 복사

이 전체 쿼리를 괄호로 묶고 인라인 보기로 사용하면 열 순서를 변경할 수 있습니다. 원하는 대로:

SELECT d.id
     , d.day
     , d.hr
     , d.amount
     , d.cumulative_total
FROM (
       // query from above
     ) d
로그인 후 복사

제한 사항

이 접근 방식은 대규모 데이터 세트의 경우 계산 집약적일 수 있다는 점을 명심하세요. 또한 원래 쿼리의 조건자가 복잡할 경우 솔루션의 복잡성이 더욱 높아질 수 있습니다.

위 내용은 8.0 이전 MySQL 버전에서 누적 합계를 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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