Doppelte Gruppierung in einer Abfrage
Andü
- datenbank
0 wahsaga0 Andü
0 Frank (no reg)
Hallo.
Ich kämpfe grad mit dem Problem bei MySQL eine Gruppierung sofort wieder zu gruppieren, und zwar alles komplett in einer Abfrage.
Hier ein Beispiel (apache-Log-Dateien):
Host | IP | Datum | ...
----------------|---------|---------------------|-----
www.irgendwo.de | 1.1.1.1 | 01.01.2006 01:01:01 | ...
www.irgendwo.de | 2.2.2.2 | 01.01.2006 02:02:02 | ...
www.irgendwo.de | 2.2.2.2 | 02.01.2006 03:03:03 | ...
...usw...
Nun die erste Zusammenfassung (zeigt mir alle IPs an einem Tag an):
SELECT IP, DAYOFYEAR(Datum) FROM apache_log GROUP BY DAYOFYEAR(Datum) , IP;
IP | Dayofyear
--------|--------
1.1.1.1 | 1
2.2.2.2 | 1
2.2.2.2 | 2
Nun möchte ich nocheinmal nach den Tag gruppieren um gezählt zu haben viewiel Besucher pro Tag auf der Seite waren (Das ich jetzt hier kein Datum hab ist erstmal unerheblich).
Dayofyear | COUNT(*)
----------|----------
1 | 2
2 | 1
Das grundsätzliche Realisieren (mittels PHP) ist kein Problem, ich hätte das bloß gern alles in eine Abfrage gebaut. Ich brauch sozusagen das Resultat der ersten Abfrage als Quelle für die Zeite. Ist das möglich?
Gruß, Andreas
hi,
Ich brauch sozusagen das Resultat der ersten Abfrage als Quelle für die Zeite.
So eine Anforderung sagt eigentlich (fast) immer: "Subquery"
Ist das möglich?
Das kommt auf deine Datenbank-Version an.
gruß,
wahsaga
Hallo nochmal.
So eine Anforderung sagt eigentlich (fast) immer: "Subquery"
Vielen Dank, läuft super...
Das kommt auf deine Datenbank-Version an.
...um genau zu sein muss man mindestens MySQL 4.1 haben.
Außerdem würde die funktionierende Abfrage (für alle mit dem selben Problem) wie folgt aussehen:
SELECT datum_neu, COUNT(*) FROM (SELECT IP, DAYOFYEAR(Datum) datum_neu FROM apache_log GROUP BY datum_neu, IP) AS abfrage1 GROUP BY datum_neu;
Hallo,
warum so kompliziert (Subquery)?
Eingabe:
IP, Datum
Ziel:
Einträge gezählt nach DAYOFYEAR?
Lösung:
COUNT(*) Aggregation + Gruppierung nach DAYOFYEAR
SELECT
DAYOFYEAR(Datum) AS [Kalendertag]
,COUNT(*) AS [Besucher pro Tag]
FROM apache_log
GROUP BY DAYOFYEAR(Datum)
Ciao, Frank