SQL 쿼리에서 누적 합계를 계산하는 것은 일반적인 요구 사항입니다. OVER
절은 Oracle 및 ANSI-SQL에서 이러한 계산을 수행하는 편리한 방법을 제공합니다. 그러나 SQL Server의 OVER
절 구현에는 특정 사용 사례를 처리할 수 있는 유연성이 부족합니다.
단점에도 불구하고 SQL Server에서 누적 합계를 계산하는 효과적인 기술은 집계 집합 문을 사용하는 것입니다. 이 방법에는 다음이 포함됩니다.
이 기술은 매우 효율적이지만 잠재적인 문제가 있습니다.
UPDATE
문이 행을 처리하는 순서는 날짜 순서와 항상 동일하지 않을 수도 있습니다. 벤치마크 테스트에서는 SQL Server의 제약 조건 내에서 커서 방법이 누적 합계를 계산하는 가장 빠르고 안전한 방법임을 보여줍니다. 업데이트 트릭은 최고의 성능을 제공하지만 처리 순서에 잠재적인 문제가 있습니다. 따라서 프로덕션 코드의 경우 커서 기반 접근 방식을 사용하는 것이 좋습니다.
다음 코드는 벤치마킹을 위한 테스트 데이터와 함께 작업 예제를 제공합니다.
테스트 데이터 설정:
<code class="language-sql">CREATE TABLE #t ( ord INT PRIMARY KEY, total INT, running_total INT ); SET NOCOUNT ON; DECLARE @i INT; SET @i = 0; BEGIN TRAN; WHILE @i < 10000 BEGIN INSERT INTO #t (ord, total) VALUES (@i, ABS(CHECKSUM(NEWID()) % 1000)); SET @i = @i + 1; END; COMMIT TRAN;</code>
테스트 방법:
테스트 1: 상관 하위 쿼리
<code class="language-sql">SELECT ord, total, (SELECT SUM(total) FROM #t b WHERE b.ord <= a.ord) AS RunningTotal FROM #t a ORDER BY a.ord;</code>
테스트 2: 교차 연결
<code class="language-sql">SELECT a.ord, a.total, SUM(b.total) AS RunningTotal FROM #t a CROSS JOIN #t b WHERE b.ord <= a.ord GROUP BY a.ord, a.total ORDER BY a.ord;</code>
테스트 3: 커서
<code class="language-sql">DECLARE @TotalTable TABLE ( ord INT PRIMARY KEY, total INT, running_total INT ); DECLARE forward_cursor CURSOR FAST_FORWARD FOR SELECT ord, total FROM #t ORDER BY ord; OPEN forward_cursor; DECLARE @running_total INT, @ord INT, @total INT; SET @running_total = 0; FETCH NEXT FROM forward_cursor INTO @ord, @total; WHILE (@@FETCH_STATUS = 0) BEGIN SET @running_total = @running_total + @total; INSERT @TotalTable VALUES (@ord, @total, @running_total); FETCH NEXT FROM forward_cursor INTO @ord, @total; END; CLOSE forward_cursor; DEALLOCATE forward_cursor; SELECT * FROM @TotalTable;</code>
테스트 4: 업데이트 팁
<code class="language-sql">DECLARE @total INT; SET @total = 0; UPDATE #t SET running_total = @total, @total = @total + total; SELECT * FROM #t;</code>
위 네 가지 방법의 실행 효율성을 비교하면 SQL Server에서 누적합을 계산하는 모범 사례를 도출할 수 있습니다. 실제 성능은 데이터 양과 서버 구성에 따라 달라질 수 있습니다.
위 내용은 SQL Server에서 총 실행 합계를 계산하는 가장 효율적인 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!