GROUP BY: Mindestanzahl festlegen
am 06.06.2005 10:57:55 von Peter Wittenberger
Hallo NG,
ich habe folgenden SELECT:
SELECT Country,currents,SUM(currents) AS info
FROM global_list where currents > 0 AND Country != 1 GROUP BY Country order
by info desc
Ich möchte aber nicht nur die Inhalte mit currents > 0 auswählen - sondern
auch die Anzahl die eine Gruppe haben muss. Sprich: Es dürfen nur die
ausgewertet werden, die mindestens 4 Datensätze pro Gruppe aufweisen. Gibt
es hierfür eine mySQL-Lösung? Mit obigem Select werden auch Gruppen mit
"nur" 2 Datensätzen ausgegeben. Wie gesagt: Ich hätte gern eine Mindestzahl
von 4.
Danke Euch,
Peter
Re: GROUP BY: Mindestanzahl festlegen
am 06.06.2005 11:18:02 von Fabian Schladitz
Peter Wittenberger schrieb:
> ich habe folgenden SELECT:
>=20
> SELECT Country,currents,SUM(currents) AS info
> FROM global_list where currents > 0 AND Country !=3D 1 GROUP BY Country=
order
> by info desc
>=20
> Ich möchte aber nicht nur die Inhalte mit currents > 0 auswählen - =
sondern
> auch die Anzahl die eine Gruppe haben muss. Sprich: Es dürfen nur die=
> ausgewertet werden, die mindestens 4 Datensätze pro Gruppe aufweisen.=
Gibt
> es hierfür eine mySQL-Lösung? Mit obigem Select werden auch Gruppen=
mit
> "nur" 2 Datensätzen ausgegeben. Wie gesagt: Ich hätte gern eine Min=
destzahl
> von 4.
Du willst sicher noch kurz deine Tabellenstruktur posten und uns=20
verraten, was du mit "mindestens 4 Datensätze pro Gruppe" meinst.
Welche Gruppen werden denn da gebildet?
Aber vielleicht suchst du einfach folgendes?
SELECT Country, currents, SUM(currents) AS info, COUNT(*) AS Anzahl
FROM global_list
WHERE currents > 0 AND Country !=3D 1
GROUP BY Country
HAVING Anzahl > 4
ORDER BY info DESC
Wer weiß, wer weiß?
--=20
HTH,
Fabian
Re: GROUP BY: Mindestanzahl festlegen
am 06.06.2005 11:22:16 von Uli Honal
Peter Wittenberger wrote:
> SELECT Country,currents,SUM(currents) AS info
> FROM global_list where currents > 0 AND Country !=3D 1 GROUP BY Country=
order
> by info desc
>=20
> Ich möchte aber nicht nur die Inhalte mit currents > 0 auswählen - =
sondern
> auch die Anzahl die eine Gruppe haben muss. Sprich: Es dürfen nur die=
> ausgewertet werden, die mindestens 4 Datensätze pro Gruppe aufweisen.=
=20
Ich denke Du suchst
HAVING COUNT(...) >=3D 4
Der HAVING-Clause steht zwischen GROUP BY und ORDER BY, und ist
praktisch eine WHERE-Bedingung, die nach dem Gruppieren angewandt wird.
Die Details findest Du im MySQL Manual:
http://dev.mysql.com/doc/mysql/de/select.html
> Gibt es hierfür eine mySQL-Lösung?
Ja, pures SQL-Problem. Ich sehe keinen Zusammenhang mit PHP, daher:
xpost & f'up2 d.c.d.mysql
cheers,
-Uli.