SQL Sum und Count in einer Abfrage einer Tabelle als Produkt ausgeben

vasco36

Lt. Junior Grade
Registriert
Okt. 2006
Beiträge
301
Hallo,

ich habe zwei Abfragen auf die gleiche Tabelle, die mir die Summe und Anzahl liefern. Nun möchte ich beides in einer Abfrage machen und anschließend die beiden Ergebniss miteinander mutliplizieren. Problem ist, die where Bedingungen der beiden Abfragen sind nicht gleich.

Auszug aus Abfrage 1
select count (distinct AUDIT_OBJEKTNUMMER) from V_GV_GESAMT_FZG_MOT where
AUDITKLASSEKUERZEL in ('G','ML','LQ')

Auszug aus Abfrage 2
select sum(BIGEWICHT) from V_GV_GESAMT_FZG_MOT where
AUDITKLASSEKUERZEL in ('G','ML','LQ') and
ZIELABWEICHUNG_FLAG in ('N','-')

Ich habe google gefragt, aber keine Lösung für mein Problem gefunden.
 
Ich bin mir nicht sicher, ob das ohne weiteres geht, da die beiden Abfragen sicht nicht auf die gleichen Zeilen beziehen (wegen dem "and" bei Abfrage 2).

[EDIT]Ich sollte die Posts genauer durchlesen. Das Problem hast du ja selbst erkannt. Da es im Endeffekt sowieso darauf hinauslaufen wird, dass die Daten 2x durchsucht werden müssen, stellt sich die Frage, ob es überhaupt sinnvoll ist beides in eine Abfrage zu packen. Dazu müsste man mehr über den Kontext kennen. Falls es um Performance geht könnte eine temporäre Tabelle nützlich sein, falls diese nicht zu groß werden würde.
 
Zuletzt bearbeitet:
Mit würden 2 Wege einfallen:

a) das ganze in eine Stored Procedure packen

also das Ergebnis der 2 Selects Zwischenspeichern und danach multiplizieren

b) ein Cross Join über die 2 Selects

müsste grob so aussehen (ungetestet):
select s * c from (select Count() as c from ...), (select sum() as s from ...)
 
Select Anzahl*Summe AS Ergebnis from
(
Select count (distinct AUDIT_OBJEKTNUMMER) AS Anzahl from V_GV_GESAMT_FZG_MOT where
AUDITKLASSEKUERZEL in ('G','ML','LQ')
UNION
Select sum(BIGEWICHT) AS Summe from V_GV_GESAMT_FZG_MOT where
AUDITKLASSEKUERZEL in ('G','ML','LQ') and
ZIELABWEICHUNG_FLAG in ('N','-')
)

ob es Syntaktisch korrekt ist, kannst du mir dann sagen :D
 
@misa555:
Leider scheint es das nicht zu sein :)

"ORA-00904: "SUMME": ungültiger Bezeichner
00904. 00000 - "%s: invalid identifier" "

@jesterfox: Da muss ich mich erst mal reinfinden.:freak:
 
@misa55: mit einem Union (war auch mein erster Gedanke) wird's nicht klappen, dann bekommst du die 2 Ergebnisse ja in 2 Verschiedenen Zeilen der Ergebnismenge. Daher die Sache mit dem Cross Join, so werden es 2 Spalten.

Einfacher wäre es aber wenn du eine Stored Procedure anlegen könntest. Welche Datenbank verwendest du?
 
@Jesterfox, ja da hast recht :) Deine Query schein da eher richtig zu sein, als meine

Select XY.Anzahl*XZ.Summe AS Ergebnis from
(
Select count (AUDIT_OBJEKTNUMMER) AS Anzahl from V_GV_GESAMT_FZG_MOT where
AUDITKLASSEKUERZEL in ('G','ML','LQ')
) XY
,
(
Select sum(BIGEWICHT) AS Summe from V_GV_GESAMT_FZG_MOT where
AUDITKLASSEKUERZEL in ('G','ML','LQ') and
ZIELABWEICHUNG_FLAG in ('N','-')
) XZ

"Distinct verwirrt mich hier ein wenig...
 
Zuletzt bearbeitet:
Habe oben nochmal angepasst, getestet auf: w3schools

SELECT XY.Summe1*XZ.Summe2 AS Ergebnis from
(SELECT SUM(ShipperID) AS Summe1 FROM Orders WHERE EmployeeID = 3) XY,
(SELECT SUM(ShipperID) AS Summe2 FROM Orders WHERE EmployeeID = 4) XZ
 
Hi,
mal ein Schuss ins Blaue.

SELECT COUNT (a.AUDIT_OBJEKTNUMMER) * SUM (b.BIGEWICHT)
FROM V_GV_GESAMT_FZG_MOT a, V_GV_GESAMT_FZG_MOT b
WHERE a.AUDITKLASSEKUERZEL IN ('G', 'ML', 'LQ')
AND B.AUDITKLASSEKUERZEL IN ('G', 'ML', 'LQ')
AND b.ZIELABWEICHUNG_FLAG IN ('N', '-')

sollte eine Zahl geben.

---
Nach der Notation scheint das ja auch ein View zu sein, also könnte am evl. die Abfrage auf die Ursprungstabellen bringen.
LG
 
Zuletzt bearbeitet: (abfrage angepasst)
Das mit dem distinct funktioniert ganz gut :)
Es ist eine Oracle DB.
 

Ähnliche Themen

Zurück
Oben