GROUP BY: Mindestanzahl festlegen

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.