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