| 

.NET C# Java Javascript Exception

1
Hallo allerseits,

ich habe eine kurze Frage zum Count/Group by

In dem Beispiel der MySQL Referenz wird folgendes Beispiel gegeben:

mysql> SELECT besitzer, COUNT(*) FROM haustier GROUP BY besitzer;

+----------+----------+
| besitzer | COUNT(*) |
+----------+----------+
| Benny | 2 |
| Diane | 2 |
| Gwen | 3 |
| Harold | 2 |
+----------+----------+

Hierbei wird Benny ja zusammengefasst. Gibt es eine Möglichkeit dass die Ausgabe folgendermaßen aussieht?:

+----------+----------+
| besitzer | COUNT(*) |
+----------+----------+
| Benny | 2 |
| Benny | 2 |
| Diane | 2 |
| Diane | 2 |
| Gwen | 3 |
| Gwen | 3 |
| Gwen | 3 |
| Harold | 2 |
| Harold | 2 |
+----------+----------+

In meiner Tabelle gibt es ein abweichendes Attribut (id) welches ich in allen Ausprägungen brauche. Durch das Group by bekomme ich aber nur eine id zum Benny.

Ich hoffe ihr könnt mir weiterhelfen.

Schönen Gruß
Jan
News:
17.04.2013
Jan D. 3 3
5 Antworten
1
Hi,

vielleicht verstehe ich die Sache ja falsch, aber wenn dich die Ausgabe der jeweiligen ID nicht stört, dann sollte dir

SELECT besitzer, id, COUNT(*) FROM haustier GROUP BY besitzer, id


helfen.

Gruß
Manuel
18.04.2013
mschem79 56 1
manchmal sieht man den Wald vor lauter Bäumen nicht. Das ist natürlich deutlich schlanker und trifft wohl den Nagel voll auf den Kopf :-) G. Jens
XJenso 18.04.2013
0
Hi,
in MSSQL würde ich es so lösen:

SELECT Haustier.Id, Haustier.besitzer, tmp.Anzahl
FROM Haustier
INNER JOIN
(
SELECT besitzer, COUNT(*) AS Anzahl
FROM Haustier
GROUP BY besitzer
) AS tmp ON Haustier.besitzer = tmp.besitzer


ich hab da allerdings etwas dumpf in Erinnerung, dass mySql nich so richtig auf Subqueries klarkommt. Ist aber schon ein weilchen her, vielleicht können die das jetzt...
17.04.2013
Sweatdiver 126 1 6
2
In MSSQL könnte man es mit ner Window-Function noch einfacher lösen:

select Haustier.Id, Haustier.besitzer, COUNT(Haustier.Id) OVER(PARTITION BY Haustier.besitzer)
FROM Haustier
Floyd 17.04.2013
Die Unterabfrage dürfte auch mit MySQL ohne Probleme laufen.
muffi 18.04.2013
@muffi: MySQL kann Window-Functions? Wäre mir neu.
Floyd 18.04.2013
Nein, ich meinte die Unterabfrage von Sweatdiver, das müsste funktionieren ;-)
muffi 18.04.2013
0
Guten Morgen,
natürlich kann MySql Sub-Querys!

Du kannst das so lösen:


mysql> SELECT a.besitzer, (SELECT COUNT(b.*) FROM haustier as b WHERE b.besitzer=a.besitzer GROUP BY b.besitzer) FROM haustier as a ORDER BY a.besitzer;

Bedenke aber, dass du hier pro Datensatz eine zweite Abfrage an das DBMS absendest.
Ich hoffe das hilft dir.

Gruß Jens
18.04.2013
XJenso 332 7
0
Hallo allerseits,

ich hatte gehofft um den Subquery herum zu kommen da es sich um über 3,3 Millionen Datensätze handelt. Allerdings bleibt mir anscheinend nichts anderes übrig.

Danke vielmals.

Schönen Gruß
Jan
18.04.2013
Jan D. 3 3
Wahrscheinlich kommst du nur dann um Sub-Querys wenn du es in der Logik der Software realisierst. Alles in ein Array und los geht's. Aber ob du dann Performance Vorteile hast glaube ich nicht. G. Jens
XJenso 18.04.2013
0
Morgen XJenso,

es hat erstaunlicherweise mit einem Inner Join nicht wesentlich länger gedauert.

Vielen Dank nochmal.
18.04.2013
Jan D. 3 3
Inner Join ist nicht wirklich eine Stärke von MySQL. Das sollte man möglichst auflösen. Und manchmal ist das Auflösen in eine Unterabfrage sogar noch performanter als das reine Auflösen in eine Where-Bedingung.
muffi 18.04.2013

Stelle deine Sql-Frage jetzt!