GROUP BY summieren

GROUP BY summieren

am 02.03.2006 18:06:48 von Christoph Schmidt

Hallo,
trotz umfangreicher Recherche habe ich für folgendes Problem immer noch
keine Lösung gefunden:

Eine Suche in einer mysql-DB liefert mir (vereinfacht) folgendes Ergebnis:

anzahl seite_id
1 7
2 8
3 9

Ich möchte nun ausgeben "Ihre Suche ergab insgesamt 6 (Summe Anzahl)
Treffer in 3 (mysql_num_rows()) Bereichen". Jetzt habe ich "WITH ROLLUP"
gefunden, doch um mittels PHP an diesen Wert zu gelangen, muss ich ja doch
wieder alle Ergebniszeilen durchgehen und auf den NULL-Wert prüfen.

Wie komme ich an die Summe von Anzahl?

Danke und Gruss

Christoph Schmidt

Re: GROUP BY summieren

am 02.03.2006 19:29:29 von Thomas Rachel

Christoph Schmidt wrote:

> Eine Suche in einer mysql-DB liefert mir (vereinfacht) folgendes Ergebnis:
>
> anzahl seite_id
> 1 7
> 2 8
> 3 9

Warum vereinfacht? Wie liefert sie das und auf welche Anfrage hin?

Ich vermute mal, das ist ein "SELECT anzahl, seite_id FROM Tabelle
WHERE ..."

> Ich möchte nun ausgeben "Ihre Suche ergab insgesamt 6 (Summe Anzahl)
> Treffer in 3 (mysql_num_rows()) Bereichen".

Hier ist evtl. ein zweiter Query vonnöten, der (unter obiger Prämisse)
lautet:

SELECT sum(anzahl) as treffer, count(*) as bereiche from ... where ...

Dieser Query liefert Dir genau eine Zeile, die Du dann in Deiner ANwendung
weiterverarbeiten kannst.

HTH,

Thomas

Re: GROUP BY summieren

am 03.03.2006 12:42:28 von Hartmut Holzgraefe

Christoph Schmidt wrote:
> Ich möchte nun ausgeben "Ihre Suche ergab insgesamt 6 (Summe Anzahl)=

> Treffer in 3 (mysql_num_rows()) Bereichen". Jetzt habe ich "WITH ROLLUP=
"
> gefunden, doch um mittels PHP an diesen Wert zu gelangen, muss ich ja d=
och
> wieder alle Ergebniszeilen durchgehen und auf den NULL-Wert prüfen.

noch ein ORDER BY seite_id DESC hinter das ROLLUP könnte helfen?

--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com

http://www.mysql.com/support/

Re: GROUP BY summieren

am 03.03.2006 13:08:08 von Kai Ruhnau

Hartmut Holzgraefe wrote:
> Christoph Schmidt wrote:
>> Ich möchte nun ausgeben "Ihre Suche ergab insgesamt 6 (Summe Anzahl)
>> Treffer in 3 (mysql_num_rows()) Bereichen". Jetzt habe ich "WITH ROLLUP"
>> gefunden, doch um mittels PHP an diesen Wert zu gelangen, muss ich ja
>> doch
>> wieder alle Ergebniszeilen durchgehen und auf den NULL-Wert prüfen.
>
> noch ein ORDER BY seite_id DESC hinter das ROLLUP könnte helfen?

ORDER BY und WITH ROLLUP funktionieren nicht zusammen.

http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.ht ml

When you use ROLLUP, you cannot also use an ORDER BY clause to sort the
results. In other words, ROLLUP and ORDER BY are mutually exclusive.
However, you still have some control over sort order. GROUP BY in MySQL
sorts results, and you can use explicit ASC and DESC keywords with
columns named in the GROUP BY list to specify sort order for individual
columns. (The higher-level summary rows added by ROLLUP still appear
after the rows from which they are calculated, regardless of the sort
order.)

Grüße
Kai

Re: GROUP BY summieren

am 03.03.2006 17:06:56 von Hartmut Holzgraefe

Kai Ruhnau wrote:
>> noch ein ORDER BY seite_id DESC hinter das ROLLUP könnte helfen?
>=20
> ORDER BY und WITH ROLLUP funktionieren nicht zusammen.
>=20
> http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.ht ml
>=20
> When you use ROLLUP, you cannot also use an ORDER BY clause to sort the=
=20
> results. [...]

Asche über mein Haupt :(

--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com

http://www.mysql.com/support/

Re: GROUP BY summieren

am 03.03.2006 22:20:55 von Christoph Schmidt

Am Thu, 02 Mar 2006 19:29:29 +0100 schrieb Thomas Rachel:

> Hier ist evtl. ein zweiter Query vonnöten, der (unter obiger Prämisse)
> lautet:
>
> SELECT sum(anzahl) as treffer, count(*) as bereiche from ... where ...
>
> Dieser Query liefert Dir genau eine Zeile, die Du dann in Deiner ANwendung
> weiterverarbeiten kannst.

Ich hatte eigentlich gehofft, den zweiten Query irgendwie zu vermeiden,
habe es aber jetzt so gelöst.

Danke und Gruss

Christoph Schmidt