SQL SELECT FROM ... HAVING COUNT() liefert 0 Zeilen

C

Cave Johnson

Gast
Hi,

ich hab eine MySL-Abfrage die wie folgt aussieht:

Code:
SELECT
  h.name AS name, b.artikel AS artikel, COUNT(b.id) AS anzahl
FROM
  hersteller AS h JOIN bestenliste AS b ON b.id = h.id
GROUP BY
  b.artikel

Das klappt wunderbar und anzahl liefert mir auch die richtigen Werte.

Jetzt will ich mir nur Zeilen ausgeben lassen, in denen anzahl bzw. COUNT(b.id) einen bestimmten Wert übersteigt.

Laut Google funktioniert WHERE COUNT(b.id) nicht und man muss HAVING COUNT(b.id) verwenden - allerdings liefert mir sowohl das eine als auch das andere nur ein leeres Ergebnis zurück. Wie gesagt, COUNT(b.id) AS anzahl liefert mir korrekte Werte - also sollte ja auch HAVING COUNT(b.id) >= x funktionieren.


Was kann da falsch sein?
 
Da wo das WHERE sonst steht - falsche Stelle?

edit: okay, es muss wohl ganz ans Ende; zumindest läuft es nun :)
 
Zuletzt bearbeitet:
Nochmal zur Erklärung:

Having bezieht sich immer auf ein Aggregat (sum, count, etc.) und gehört somit immer hinter die GROUP-BY Klausel (insofern du nicht-aggregierte Spalten in die Abfrage mit einbeziehst).

Hier noch ein Beispiel:

Code:
SELECT 
[INDENT]AnzahlArtikel, Hersteller[/INDENT]
FROM
(
[INDENT]SELECT 
[INDENT]count(Artikel.id) as AnzahlArtikel, Hersteller.Name as Hersteller[/INDENT]
FROM 
[INDENT]Artikel  as a INNER JOIN Hersteller as h on a.hersteller_id = h.id[/INDENT]
GROUP BY
[INDENT]Hersteller.Name[/INDENT]
[/INDENT]
) AS Unterabfrage
WHERE
[INDENT]AnzahlArtikel > 3[/INDENT]

=

Code:
SELECT 
[INDENT]count(Artikel.id) as AnzahlArtikel, Hersteller.Name as Hersteller[/INDENT]
FROM 
[INDENT]Artikel  as a INNER JOIN Hersteller as h on a.hersteller_id = h.id[/INDENT]
GROUP BY
[INDENT]Hersteller.Name[/INDENT]
HAVING
[INDENT]Count(Artikel.id) > 3[/INDENT]
 

Ähnliche Themen

M
Antworten
6
Aufrufe
1.828
Mr. Snoot
M
Zurück
Oben