(MySQL) Filterung des Ergebnisses nach SUM
Humberto
- datenbank
Hallo,
ich versuche gerade, aus einer Tabelle von Ländern diejenigen Länder herauszufiltern, deren Anzahl an Einwohnern, die in Städten mit mehr als 100.000 Einwohnern wohnen, größer als 10.000.000 ist. Die Städte sind in einer Tabelle gespeichert, die folgende relevante Attribute besitzt:
LID - Die ID des Landes, in dem die Stadt liegt
Bevoelkerung - Die Gesamtbevölkerung der Stadt
Ich habe das Problem auf diese Weise zu lösen versucht:
SELECT land.name as land, SUM(stadt.bevoelkerung) as stadtbevoelkerung
FROM land, stadt
WHERE stadt.LID = land.LID AND stadt.bevoelkerung > 100000 AND stadtbevoelkerung > 10000000
GROUP BY land.lid;
Das scheiterte jedoch:
ERROR 1054 (42S22): Unknown column 'stadtbevoelkerung' in 'where clause'
Also versuchte ich es mit SUM(stadt.bevoelkerung)
anstelle von stadtbevoelkerung im where-abschnitt, allerdings scheiterte das ebenfalls:
ERROR 1111 (HY000): Invalid use of group function
Lässt sich das Problem überhaupt innerhalb einer Abfrage lösen?
Danke, Humberto
Hello,
ERROR 1054 (42S22): Unknown column 'stadtbevoelkerung' in 'where clause'
ERROR 1111 (HY000): Invalid use of group function
die beiden im Zusammenspiel weisen dich auf den richtigen Weg. SUM ist eine Aggregatsfunktion, sie steht eigentlich* bei einer Gruppierung zur Verfügung. Dementsprechend macht es Sinn, dass du "stadtbevoelkerung" nicht in der WHERE-Klause auswerten kannst, diese wird VOR der Gruppierung ausgewertet.
Die Lösung:
HAVING, das die Elemente von Gruppierungen bezeichnet, siehe Manual.
MfG
Rouven
* MySQL ist da bei Aggregatsfunktionen teilweise anderer Meinung als viele andere, aber das ist ein anderes Thema
Super, funktioniert! Vielen Dank.
Humberto