Statistiken anzeigen mit "GROUP BY"

Statistiken anzeigen mit "GROUP BY"

am 20.12.2005 13:33:23 von seb_schoeps

Hallo,

ich habe eine Tabelle mit folgenden Feldern:

Name
Strasse
Hausnummer
Ort

Nun hätte ich gerne ein Abfrage, die die Leute pro Haus zählt und in
etwa folgendes Ergebnis produziert:

Ort Anzahl Strasse Anzahl Hausnummer Anzahl
Stuttgart 1000 Hauptstr. 600 3 400
4 200
Nebenstr. 400 5 300
6 100
München 2000 Gartenstr. 1500 3 600
4 700
5 200
Blumenstr. 500 1 500

Mit "SELECT Ort, Count(Ort), Strasse, COUNT(Strasse), Hausnummer,
COUNT(Hausnummer) FROM tbl_kunden GROUP BY Ort, Strasse, Hausnummer"
bekomme ich folgendes Ergebnis:

Ort Anzahl Strasse Anzahl Hausnummer Anzahl
Stuttgart 400 Hauptstr. 400 3 400
Stuttgart 200 Hauptstr. 200 4 200
Stuttgart 300 Nebenstr. 300 5 300
Stuttgart 100 Nebenstr. 100 6 100
München 600 Gartenstr. 600 3 600
München 700 Gartenstr. 700 4 700
München 200 Gartenstr. 200 5 200
München 500 Blumenstr. 500 1 500

Die einzelnen Ort und Strassen eben nicht aufsummiert.

Hat einer ein Idee, wie ich das von mir gewünschte Ergebnis bekommen
könnte?

Vielen Dank schon mal im Voraus!

Gruß
Sebastian

Re: Statistiken anzeigen mit "GROUP BY"

am 20.12.2005 14:04:49 von Dominik Echterbruch

Sebastian Schöps wrote:
> Hallo,
>
> ich habe eine Tabelle mit folgenden Feldern:
>
> Name
> Strasse
> Hausnummer
> Ort
>
> Nun hätte ich gerne ein Abfrage, die die Leute pro Haus zählt und in
> etwa folgendes Ergebnis produziert:
>
> Ort Anzahl Strasse Anzahl Hausnummer Anzahl
> Stuttgart 1000 Hauptstr. 600 3 400
> 4 200
> Nebenstr. 400 5 300
> 6 100
> München 2000 Gartenstr. 1500 3 600
> 4 700
> 5 200
> Blumenstr. 500 1 500

Dieses Ergebnis wirst du auf keinen Fall erreichen. Ergebnisse sind
_immer_ rechteckig, d.h. in jeder Zeile stehen imme rdie gleiche Anzahl
von Spalten. Das läßt sich also nur per Skript erledigen.

> Mit "SELECT Ort, Count(Ort), Strasse, COUNT(Strasse), Hausnummer,
> COUNT(Hausnummer) FROM tbl_kunden GROUP BY Ort, Strasse, Hausnummer"
> bekomme ich folgendes Ergebnis:
>
> Ort Anzahl Strasse Anzahl Hausnummer Anzahl
> Stuttgart 400 Hauptstr. 400 3 400
> Stuttgart 200 Hauptstr. 200 4 200
> Stuttgart 300 Nebenstr. 300 5 300
> Stuttgart 100 Nebenstr. 100 6 100
> München 600 Gartenstr. 600 3 600
> München 700 Gartenstr. 700 4 700
> München 200 Gartenstr. 200 5 200
> München 500 Blumenstr. 500 1 500
>
> Die einzelnen Ort und Strassen eben nicht aufsummiert.

Das ist klar, weil du ja in jeder Zeile immer nur die die gruppierten
Zeilen aufsummiert bekommst.

> Hat einer ein Idee, wie ich das von mir gewünschte Ergebnis bekommen
> könnte?

Im Prinzip nur mit mehreren Abfragen. Die kann man aber seit Version 4.1
auch so schachteln, daß sie das gewünschte Ergebnis liefern:

SELECT a.Ort,
(SELECT COUNT(*) FROM tabelle b WHERE b.Ort = a.Ort),
a.Strasse,
(SELECT COUNT(*) FROM tabelle b WHERE b.Strasse = a.Strasse AND
b.Ort = a.Ort),
a.Hausnummer,
(SELECT COUNT(*) FROM tabelle b WHERE b.Hausnummer = a.Hausnummer
AND b.Strasse = a.Strasse AND b.Ort = a.Ort)
FROM tabelle a
GROUP BY a.Ort, a.Strasse, a.Hausnummer

Zugegeben, es ist nicht schön, aber es funktioniert :)


Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786

Re: Statistiken anzeigen mit "GROUP BY"

am 20.12.2005 14:47:09 von Wolfram Kraus

Sebastian Schöps wrote:
> Hallo,
>
> ich habe eine Tabelle mit folgenden Feldern:
>
> Name Strasse Hausnummer Ort
>
> Nun hätte ich gerne ein Abfrage, die die Leute pro Haus zählt und in
> etwa folgendes Ergebnis produziert:
>
> Ort Anzahl Strasse Anzahl Hausnummer Anzahl Stuttgart 1000
> Hauptstr. 600 3 400 4 200 Nebenstr. 400 5 300 6 100 München
> 2000 Gartenstr. 1500 3 600 4 700 5 200 Blumenstr. 500 1 500
>
[...]

> Hat einer ein Idee, wie ich das von mir gewünschte Ergebnis bekommen
> könnte?
Ich hab mir das jetzt nicht so genau angeschaut, aber uU kann dir
(bedingt, siehe Nachricht von Dominik) WITH ROLLUP weiterhelfen:

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

> Vielen Dank schon mal im Voraus!
>
> Gruß Sebastian
>

HTH,
Wolfram

Re: Statistiken anzeigen mit "GROUP BY"

am 20.12.2005 15:30:53 von seb_schoeps

Wolfram Kraus schrieb:
> Ich hab mir das jetzt nicht so genau angeschaut, aber uU kann dir
> (bedingt, siehe Nachricht von Dominik) WITH ROLLUP weiterhelfen:
>
> http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.ht ml

Danke Wolfram, das ist genau das was ich gesucht habe. Den Output habe
ich eh nur der Übersicht halber mit leeren Feldern dargestellt, mir
war klar, dass das so nicht geht.

Das Statement ist im Prinzip gleich wie vorher (nur "WITH ROLLUP"
hinzugefügt):
"SELECT Ort, Count(Ort), Strasse, COUNT(Strasse), Hausnummer,
COUNT(Hausnummer) FROM tbl_kunden GROUP BY Ort, Strasse, Hausnummer
WITH ROLLUP"=20

Danke nochmal!

Gruß Seb

Re: Statistiken anzeigen mit "GROUP BY"

am 20.12.2005 15:38:17 von Dominik Echterbruch

Sebastian Schöps wrote:
>
>>Ich hab mir das jetzt nicht so genau angeschaut, aber uU kann dir
>>(bedingt, siehe Nachricht von Dominik) WITH ROLLUP weiterhelfen:
>>
>>http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers. html
>
> Danke Wolfram, das ist genau das was ich gesucht habe. Den Output habe
> ich eh nur der Übersicht halber mit leeren Feldern dargestellt, mir
> war klar, dass das so nicht geht.
>
> Das Statement ist im Prinzip gleich wie vorher (nur "WITH ROLLUP"
> hinzugefügt):
> "SELECT Ort, Count(Ort), Strasse, COUNT(Strasse), Hausnummer,
> COUNT(Hausnummer) FROM tbl_kunden GROUP BY Ort, Strasse, Hausnummer
> WITH ROLLUP"

Wieder was gelernt :)


Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786

Re: Statistiken anzeigen mit "GROUP BY"

am 20.12.2005 16:14:53 von seb_schoeps

Dominik Echterbruch schrieb:
> Wieder was gelernt :)

Danke natürlich auch dir für deine Hilfe, hätte ja auch geklappt.

Seb