Mysql - WHERE sum( )

Lime

frisch fruchtig
Hallo da draußen,

ich hab ein ziemliches Problem und bin mit meinem Latein auch relativ am Ende... Mysql ist halt doch sehr viel weitläufiger wie ich es kenne. ;)

Derzeit habe ich eine Mysql-Abfrage, die mir alle Benutzer aus einer Benutzerliste gibt (wo Status == 1 ... bedeutet soviel wie "noch aktiv"), die noch KEINEN eintrag in einer "Verknüpfungstabelle" haben... (nur einem bestimmten Event zugeschrieben, deswegen die INNER JOINS)

Code:
SELECT *
FROM intern_user
WHERE 
(
	id NOT IN 
	(
		SELECT a.userID
		FROM intern_dienstplan AS a
		INNER JOIN intern_events_uucat AS b ON a.uucatID=b.id
		INNER JOIN intern_events_ucat as c ON b.ucatID=c.id
		INNER JOIN intern_events_cat AS d ON c.catID=d.id
		WHERE d.eventID = '".$_POST['eventid']."'
	)
)
AND status='1'

Was ich jetzt haben möchte, ist eine Abfrage, die mir sowohl alle Benutzer liefert die noch keinen Eintrag haben, aber auch die Benutzer, die nicht genug Dienst haben.

Es gibt 50% und 100% Dienste (theoretisch auch andere, aber lassen wir es mal so).
Der "Wert" eines Dienstes liegt bei intern_events_uucat als Spalte "wert", ohne %-Zeichen.

Mein Versuch war einfach bei der inneren Abfrage ein
Code:
AND SUM(b.wert)=100
anzuhängen, aber das funktioniert nicht. Vielleicht weil es falsch formatiert ist, weis ich nicht. Hab da nicht so viel Erfahrung mit dieser Funktion.

Wär klasse wenn mir jemand helfen könnte... Soll mir einfach nur die Benutzer ohne, bzw. die mit zu wenig (unter 100% gesamt) ausgeben. :)

Gruß, Lime
 
Hi,

ich bin mir nicht 100%-ig sicher, aber ich glaube, dass du noch ein GROUP BY brauchst, damit dein SUM() funktioniert.
 
Huhu,
darüber habe ich auch schon nachgedacht. Aber ich kann doch nicht einfach die WHERE-klausel durch nen GROUP BY ersetzen...
gruß
 
Code:
SELECT a.userID
FROM intern_dienstplan AS a
INNER JOIN intern_events_uucat AS b ON a.uucatID=b.id
INNER JOIN intern_events_ucat as c ON b.ucatID=c.id
INNER JOIN intern_events_cat AS d ON c.catID=d.id
WHERE d.eventID = '".$_POST['eventid']."'
AND sum(b.wert)>=100
GROUP BY a.userID

so hätte ich es jetzt verstanden... funktioniert aber dennoch nicht. :(
 
Hi,

Bedingungen von Aggregatfunktionen wie sum, count o.ä. müssen in die HAVING Klausel nach der GROUP BY Klausel.

Best regards,
Tim Bureck
 
Genau, wie im Beispiel Nr. 9 beschrieben:

Code:
SELECT A.A_NR, SUM(A.A_PREIS * B.A_STUECK) As [Umsatz-dieses-Artikels]
FROM ARTIKEL As A INNER JOIN UMSATZ As B
ON A.A_NR = B.A_NR
GROUP BY A.A_NR
HAVING SUM(A.A_PREIS * B.A_STUECK) > 10000

Auf der Seite steht eigentlich alles wissenwerte über SQL, man muss sich nur etwas Zeit dafür nehmen

MfG Alaitoc
 
Die Zeit fehlt mir. Ich probier das gleich mal aus. ;)

€: Ich hätte nicht gedacht, dass es klappt, aber es tut es!
Vielen vielen Dank an alle Helfer. :D

Für alle, die vielleicht dasselbe Problem ereilen sollte, hier mein fertiger Code:

Code:
SELECT *
FROM intern_user
WHERE 
(
	id NOT IN 
	(
    		SELECT a.userID
		FROM intern_dienstplan AS a
		INNER JOIN intern_events_uucat AS b ON a.uucatID=b.id
		INNER JOIN intern_events_ucat as c ON b.ucatID=c.id
		INNER JOIN intern_events_cat AS d ON c.catID=d.id
                WHERE d.eventID='".$_POST['eventid']."'
		GROUP BY a.userID
		HAVING sum(b.wert) >= 100
	)
)
AND status='1'

Gruß, Lime
 
Zuletzt bearbeitet:
Zurück