So erstellen Sie eine SUMME ohne Gruppe nach

8

Hier ist mein Problem ..

%Vor%

Ich möchte das Ergebnis wie unten angegeben

%Vor%

Hier ist Remaining (sum(auction)-actual) .

Ich benutze PostgreSQL. Aber wenn jemand Lösung in SQL Server kennt, ist es OK.

    
Aijaz Chauhan 09.10.2013, 12:11
quelle

2 Antworten

12

Sie brauchen eine Fensterfunktion - Ссылка

Etwas wie:

%Vor%     
Idan Arye 09.10.2013, 12:18
quelle
5

Idan ist 100% korrekt. Ich möchte eine Erklärung dafür geben:

%Vor%
  • OVER () erstellt ein Fenster einschließlich aller Zeilen aus der ursprünglichen Abfrage.
  • SUM (Auction) ist eine Fensterfunktion , die die Summe von Auction berechnet.

Hier ist eine weitere Erklärung:

  • Fenster ist eine benutzerdefinierte Gruppe von Zeilen innerhalb eines Abfrageergebnissatzes.

  • Fensterfunktion berechnet einen Wert (z. B. SUM ) für alle Zeilen im Fenster.

  • Alle Zeilen sind im Fenster, weil OVER() PARTITION BY nicht enthält. Mit PARTITION BY würde das Fenster eine Teilmenge von Zeilen enthalten.

Von MSDN :

  

... Die OVER-Klausel definiert ein Fenster oder eine benutzerdefinierte Gruppe von Zeilen innerhalb eines Abfrageergebnissatzes. Eine Fensterfunktion berechnet dann einen Wert für jede Zeile im Fenster. Sie können die OVER-Klausel mit Funktionen zur Berechnung aggregierter Werte verwenden, wenn die OVER-Klausel PARTITION BY nicht enthält. Dies bedeutet, dass die Funktion auf alle von der Abfrage zurückgegebenen Zeilen angewendet wird.

    
Shaun Luttin 23.04.2015 18:42
quelle