Heim > Datenbank > MySQL-Tutorial > Wie kann man laufende Summen in SQL Server effizient berechnen?

Wie kann man laufende Summen in SQL Server effizient berechnen?

Linda Hamilton
Freigeben: 2025-01-25 03:22:14
Original
292 Leute haben es durchsucht

How to Efficiently Calculate Running Totals in SQL Server?

Berechnen Sie die laufende Summe in SQL Server

Einführung

Die Berechnung laufender Summen ist eine häufige Aufgabe bei der Datenanalyse. In SQL Server gibt es mehrere Möglichkeiten, dies zu erreichen, einschließlich der Verwendung von Fensterfunktionen, korrelierten Unterabfragen und Cursor-basierten Lösungen. Die Aggregate Set Statement-Technik ist eine Möglichkeit, Diskussionen anzuregen. Bei dieser Technik werden Zeilen in eine temporäre Tabelle mit einer leeren laufenden Summe eingefügt, die Tabelle in einer bestimmten Reihenfolge aktualisiert und schließlich die aktualisierte laufende Summe ausgewählt.

Kompetenzen zur Aggregation von Satzanweisungen

Die folgende Abfrage verwendet den Aggregate-Set-Anweisungstrick, um eine laufende Summe zu berechnen:

<code class="language-sql">INSERT INTO @AnotherTbl(id, somedate, somevalue, runningtotal) 
SELECT id, somedate, somevalue, null
FROM TestTable
ORDER BY somedate

DECLARE @RunningTotal int
SET @RunningTotal = 0

UPDATE @AnotherTbl
SET @RunningTotal = runningtotal = @RunningTotal + somevalue
FROM @AnotherTbl</code>
Nach dem Login kopieren

Diese Methode gilt als effizient, da sie Zeilen in der Reihenfolge aktualisiert, in der sie abgerufen werden. Es bestehen jedoch Bedenken hinsichtlich der Zuverlässigkeit in allen Szenarien.

Eine Alternative zum Aggregat-Set-Anweisungstrick

1. Fensterfunktion:

SQL Server 2012 führte die OVER-Klausel ein, die die Verwendung von Fensterfunktionen (z. B. SUM mit kumulativer Aggregation) ermöglicht. Dies macht zusätzliche Tabellenoperationen überflüssig und vereinfacht Abfragen:

<code class="language-sql">SELECT somedate, somevalue,
    SUM(somevalue) OVER(ORDER BY somedate) AS RunningTotal
FROM TestTable</code>
Nach dem Login kopieren

2. Zugehörige Unterabfrage:

Eine korrelierte Unterabfrage kann verwendet werden, um die laufende Summe für jede Zeile abzurufen:

<code class="language-sql">SELECT somedate, somevalue,
(
    SELECT SUM(somevalue) 
    FROM TestTable b 
    WHERE b.somedate < a.somedate
) AS RunningTotal
FROM TestTable a</code>
Nach dem Login kopieren

3. Cursorbasierte Lösung:

Cursoren bieten einen Mechanismus, um Zeilen Schritt für Schritt (in einer bestimmten Reihenfolge) zu verarbeiten. Die folgende Cursor-basierte Lösung berechnet inkrementell die laufende Summe:

<code class="language-sql">DECLARE @TotalTable table(id int primary key, somedate date, somevalue int, runningtotal int)

DECLARE forward_cursor CURSOR FAST_FORWARD 
FOR 
SELECT id, somedate, somevalue
FROM TestTable 
ORDER BY somedate


OPEN forward_cursor 

DECLARE @running_total int, 
    @id int, 
    @somedate date, 
    @somevalue int
SET @running_total = 0

FETCH NEXT FROM forward_cursor INTO @id, @somedate, @somevalue 
WHILE (@@FETCH_STATUS = 0)
BEGIN
     SET @running_total = @running_total + @somevalue
     INSERT @TotalTable VALUES(@id, @somedate, @somevalue, @running_total)
     FETCH NEXT FROM forward_cursor INTO @id, @somedate, @somevalue 
END

CLOSE forward_cursor
DEALLOCATE forward_cursor

SELECT * FROM @TotalTable</code>
Nach dem Login kopieren

Fazit

In SQL Server hängt die Wahl der Methode zur Berechnung laufender Summen von Faktoren wie Datengröße, Leistungsanforderungen und SQL Server-Version ab. Der „Aggregate-Set-Statement-Trick“ ist immer noch eine praktikable Option für effiziente Updates, und Fensterfunktionen bieten eine einfachere Syntax in neueren Versionen von SQL Server. Aus Gründen der Flexibilität und Kontrolle sollten korrelierte Unterabfragen und Cursor-basierte Lösungen in Betracht gezogen werden. Benchmarking wird empfohlen, um den besten Ansatz für ein bestimmtes Szenario zu ermitteln.

Das obige ist der detaillierte Inhalt vonWie kann man laufende Summen in SQL Server effizient berechnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage