Summe aus Subquery Summe --> Warum funktioniert das so nicht...?

basementmedia

Benutzer
Beiträge
16
Hi zusammen,

ich habe folgende Beispiel-Tabelle

ID|projekt_id|menge|betrag
1 | 26416 | 1 | 200
2 | 26416 | 2 | 500
3 | 26417 | 1 | 12

Nun möchte ich die Summe aus dem Ergebnis aus Menge * Betrag aller Datensätze mit der Projekt-ID = 26416 haben, also in dem Fall

1 * 200 + 2 * 500 = 1200

Folgendes war mein Versuch:

SELECT
p.ID as pid,
SELECT SUM(subtotal) as total FROM (
SELECT (menge*betrag) AS subtotal FROM rechnungen WHERE projekt_id=p.ID GROUP BY ID)
) AS t
FROM projekte p
WHERE p.ID=26416

Wo liegt mein Denkfehler?

Danke schon mal für eure Unterstützung ;-)

LG Daniel
 
Werbung:
Code:
test=*# create table basementmedia(id int primary key, pid int, menge int, betrag int);
CREATE TABLE
test=*# copy basementmedia from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF signal.
>> 1   26416   1   200
>> 2   26416   2   500
>> 3   26417   1   12
>> \.
COPY 3
test=*# select * from basementmedia ;
 id |  pid  | menge | betrag
----+-------+-------+--------
  1 | 26416 |     1 |    200
  2 | 26416 |     2 |    500
  3 | 26417 |     1 |     12
(3 rows)
test=*# select pid, sum(menge * betrag) from basementmedia where pid = 26416 group by pid;
  pid  | sum  
-------+------
 26416 | 1200
(1 row)

test=*#
 
Werbung:
Wo liegt mein Denkfehler?
Nicht böse sein, aber "Denkfehler"? ;)
Hast Du schon mal (irgend)eine Dokumentation zu group by gelesen oder ein paar Beispiele eines Tutorials dazu laufen lassen und nachvollzogen? Das Internet ist voll davon, sogar für das seltsame Datenbanksystem, das Du verwendest.

Du machst mehrere Fehler.
Gruppierung nach dem falschen Feld.
Gruppierung oder Summierung auf der falschen Ebene /falsche Klammerung / überflüssige Unterabfrage.
Verwendung eine DB mit fehlerhafter Syntaxprüfung/ falscher Datenausgabe. (zugegeben, einem Anfänger ist das vielleicht nicht bekannt, eine gemeine Ecke)

Der richtige Weg wurde ja schon gezeigt.
 
Zurück
Oben