SQL-Wie man eine bedingte Summe von eindeutige id?
Angenommen, Sie haben ResultSet wie:
DATE ID cost
---------------------------------------
01/01/2011 1 10
01/01/2011 1 10
01/01/2011 2 10
01/01/2011 2 10
Ich will einen Weg, um die Summe der Werte auf den Preis, sondern nur einmal für jede eindeutige ID, so dass, wenn ich group by Datum, das ich ein Ergebnis erhalten, wie
DATE cost
01/01/2011 20
Zuerst habe ich versucht so etwas wie
sum(distinct cost)
aber, dass der Fluch, gibt nur 10
Ich habe auch versucht:
sum(case when distinct id then cost else 0 end)
aber das ist nicht eine funktionelle Abfrage.
- Welche Geschmacksrichtung von SQL verwenden Sie?
- Sind die Kosten-Werte immer die gleiche für eine gegebene ID?
- Dies ist von oracle ist, kann ich nicht group by Datum und Id, wie ich muss 1 Zeile pro Datum.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gehe ich davon aus, dass die gleiche ID haben immer den gleichen Kosten in der gleichen Tag. Ich werde auch davon ausgehen RDBMS unterstützt abgeleitete Tabellen. In diesem Fall ist dies, was Sie wollen:
Aktualisiert
Oracle abgeleitete Tabellen erfordern keine alias.
Ich denke, dass alle Sie tun möchten ist hier group by Datum und id, wie MPelletier schrieb.
FWIW - Sie können eine unterschiedliche innen ein Aggregat in einigen dbs:
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_sum
Und noch besser, verwenden von group by mit rollup zu erhalten Summen zusammen mit der Gruppierung:
http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html
Ich denke, es gibt einige Fehler mit der Logik der gepostete Frage.
Angenommen, Sie haben dieses ResultSet:
Was soll die Abfrage?
oder
Akzeptierte Antwort zurück
35
.Ist oder eine solche einstellen nicht möglich?
Ohne Kenntnis des Datenbank - /SQL-engine:
SELECT Datum, Sum(Kosten)
FROM YourTable
GROUP BY Datum, ID;
Können Sie diese Abfrage verwenden.
VERSUCHEN, DIESE
oder DIESE
Versuchen, Diese
Ich verwende Mysql für diese.
DEMO-TABELLE(Tabellenname 'tablename'. id und Kosten ist der Typ von 'int' )
Abfrage verwenden
ODER (unter einer)
Ergebnis :