[PHP/SQL] Durschittsmengen pro Tagen *** erledigt ***

strolch00

redraft.de
ID: 155297
L
21 April 2006
1.684
72
Hi @all,

ich möchte für meine Seite eine Durchschnittsmenge an DB Einträgen pro Tagen errechenen. Jetzt stellt sich mir die Frage wie ich das am besten und einfachsten. Da ich nicht jede MySql Funktion kenne wollte ich mal eben fragen ob es möglich ist das ich mir den Tag im Query holen lasse und dann danach Gruppiere und Counte. Wo bei Wenn ich so drüber nachdenke werde ich das GROUP BY nicht nehmen können in der Verbindung mit dem Count oder?

Kennt einer noch eine bessere Möglichkeit? Großes Rumrechnen und Array schubsen in PHP will ich vermeiden, MySql sollte es schon in einem annehmbaren Array liefern.

Danke

*edit
Meine jetzige bissherige Lösung ist jetzt
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B] [B][COLOR=#9932cc]COUNT[/COLOR][/B][COLOR=#9932cc]([/COLOR]*[COLOR=#9932cc])[/COLOR], [B][COLOR=#9932cc]DAYOFYEAR[/COLOR][/B][COLOR=#9932cc]([/COLOR]FROM_UNIXTIME(`date`[COLOR=#9932cc])[/COLOR]), `id_field` [B][COLOR=#9932cc]FROM[/COLOR][/B] `table` [B][COLOR=#9932cc]WHERE[/COLOR][/B] `id_field` = 29 [B][COLOR=#9932cc]GROUP[/COLOR][/B] [B][COLOR=#9932cc]BY[/COLOR][/B] [B][COLOR=#9932cc]DAYOFYEAR[/COLOR][/B][COLOR=#9932cc]([/COLOR]FROM_UNIXTIME(`date`[COLOR=#9932cc])[/COLOR]), `id_field`[/FONT]

Das id_field im Group könnte ich mir doch durch die Where auch sparen ne, ist ja so sinnlose(noch nen Überbleibsel vom testen mit allen id´s ohne WHERE).

Jetzt ist nur die Frage kann ich mysql/sql das auch gleich rechnen lassen?
Wenn ja wie bekomme ich die anzahl der Tage heraus(Datensätze).
 
Zuletzt bearbeitet:
Da ich nicht jede MySql Funktion kenne wollte ich mal eben fragen ob es möglich ist das ich mir den Tag im Query holen lasse und dann danach Gruppiere und Counte. Wo bei Wenn ich so drüber nachdenke werde ich das GROUP BY nicht nehmen können in der Verbindung mit dem Count oder?
Solang du nur solche Funktionen (COUNT(), AVG(), SUM(), MAX(), ...) benutzst, kannst du das im GROUP BY erledigen.

Um die Tage zu separieren würde ich TO_DAYS() nehmen. Liefert zwar eine komische Zahl, aber die is ja im Endeffekt egal, weil du nur gruppieren willst.
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B] [B][COLOR=#9932cc]DATE_FORMAT[/COLOR][/B][COLOR=#9932cc]([/COLOR]`date`,"%d.%m.%y"[COLOR=#9932cc])[/COLOR] [B][COLOR=#9932cc]AS[/COLOR][/B] `day`,[B][COLOR=#9932cc]AVG[/COLOR][/B][COLOR=#9932cc]([/COLOR]`queries`[COLOR=#9932cc])[/COLOR] [B][COLOR=#9932cc]AS[/COLOR][/B] `queries`
[B][COLOR=#9932cc]FROM[/COLOR][/B] `table`
[B][COLOR=#9932cc]GROUP[/COLOR][/B] [B][COLOR=#9932cc]BY[/COLOR][/B] [B][COLOR=#9932cc]TO_DAYS[/COLOR][/B][COLOR=#9932cc]([/COLOR]`date`[COLOR=#9932cc])[/COLOR][/FONT]
Wegen der Formatierung nochmal nachgucken, ich hab die Datumsfunktion ned auswenig im Kopf. Prinzip hattest du ja aber schon.
 
Also ich habe mal versucht das AVG umzusetzen allerdings bekomm ich bei folgendem Query nen error
Query:
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B] [B][COLOR=#9932cc]AVG[/COLOR][/B][COLOR=#9932cc]([/COLOR]COUNT(*[COLOR=#9932cc])[/COLOR]), [B][COLOR=#9932cc]DAYOFYEAR[/COLOR][/B][COLOR=#9932cc]([/COLOR]FROM_UNIXTIME(`date`[COLOR=#9932cc])[/COLOR]), `id_field` [B][COLOR=#9932cc]FROM[/COLOR][/B] `table` [B][COLOR=#9932cc]WHERE[/COLOR][/B] `id_field` = 29 [B][COLOR=#9932cc]GROUP[/COLOR][/B] [B][COLOR=#9932cc]BY[/COLOR][/B] [B][COLOR=#9932cc]DAYOFYEAR[/COLOR][/B][COLOR=#9932cc]([/COLOR]FROM_UNIXTIME(`date`[COLOR=#9932cc])[/COLOR])[/FONT]
error:
Invalid use of group function
und bei folgendem Query:
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B] [B][COLOR=#9932cc]AVG[/COLOR][/B][COLOR=#9932cc]([/COLOR]`other_id_field`[COLOR=#9932cc])[/COLOR], [B][COLOR=#9932cc]DAYOFYEAR[/COLOR][/B][COLOR=#9932cc]([/COLOR]FROM_UNIXTIME(`date`[COLOR=#9932cc])[/COLOR]), `id_field` [B][COLOR=#9932cc]FROM[/COLOR][/B] `table` [B][COLOR=#9932cc]WHERE[/COLOR][/B] `id_field` = 29 [B][COLOR=#9932cc]GROUP[/COLOR][/B] [B][COLOR=#9932cc]BY[/COLOR][/B] [B][COLOR=#9932cc]DAYOFYEAR[/COLOR][/B][COLOR=#9932cc]([/COLOR]FROM_UNIXTIME(`date`[COLOR=#9932cc])[/COLOR])[/FONT]
kommt nur Murk´s(so richtig) raus.
other_id_field ist die auto_increment spalte, und jetzt wird mir auch klar warum da nur Murk´s rauskommt.
 
Zuletzt bearbeitet:
wasn das? wie soll das system bitte sowas wie AVG(COUNT(*)) auflösen können?

so wird nen schuh draus

PHP:
SELECT COUNT(*)/(TO_DAYS(NOW())-TO_DAYS(MIN(datum))) FROM tabelle
 
Danke Zero ich teste gleich mal, also würde das im Klartext heisen ich kann AVG in meinem speziellen Fall nicht nehmen, weil ich ohne count(*) nicht die Anzahl bekomme und AVG mit COUNT(*) nicht umgehen kann(muss eine feste Spalte sein).

*edit
@Zero
Danke hat funktioniert hier nochmal der gesammte Query:
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B] [B][COLOR=#9932cc]COUNT[/COLOR][/B][COLOR=#9932cc]([/COLOR]*[COLOR=#9932cc])[/COLOR]/([B][COLOR=#9932cc]DAYOFYEAR[/COLOR][/B][COLOR=#9932cc]([/COLOR]NOW([COLOR=#9932cc])[/COLOR])-[B][COLOR=#9932cc]DAYOFYEAR[/COLOR][/B][COLOR=#9932cc]([/COLOR]FROM_UNIXTIME(MIN(`date`[COLOR=#9932cc])[/COLOR]))) [B][COLOR=#9932cc]as[/COLOR][/B] schnitt, [B][COLOR=#9932cc]DAYOFYEAR[/COLOR][/B][COLOR=#9932cc]([/COLOR]FROM_UNIXTIME(`date`[COLOR=#9932cc])[/COLOR]), `id_field` [B][COLOR=#9932cc]FROM[/COLOR][/B] `table` [B][COLOR=#9932cc]WHERE[/COLOR][/B] `id_field` = 29 [B][COLOR=#9932cc]GROUP[/COLOR][/B] [B][COLOR=#9932cc]BY[/COLOR][/B] `id_field`[/FONT]

Danke euch beiden.
 
Zuletzt bearbeitet:
Ich hätte als Alternative - je nachdem, was man halt braucht, da bei meiner Query nur Tage im Durchschnitt sind, an denen mindestens ein Datensatz vorkommt - folgende Query:
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B] [B][COLOR=#9932cc]AVG[/COLOR][/B][COLOR=#9932cc]([/COLOR]`count`[COLOR=#9932cc])[/COLOR] [B][COLOR=#9932cc]AS[/COLOR][/B] `average` [B][COLOR=#9932cc]FROM[/COLOR][/B] [COLOR=Black]([/COLOR]
  [B][COLOR=#9932cc]SELECT[/COLOR][/B] [B][COLOR=#9932cc]COUNT[/COLOR][/B][COLOR=#9932cc]([/COLOR]*[COLOR=#9932cc])[/COLOR] [B][COLOR=#9932cc]AS[/COLOR][/B] `count`
  [B][COLOR=#9932cc]FROM[/COLOR][/B] `table`
  [B][COLOR=#9932cc]GROUP[/COLOR][/B] [B][COLOR=#9932cc]BY[/COLOR][/B] [B][COLOR=#9932cc]TO_DAYS[/COLOR][/B][COLOR=#9932cc]([/COLOR][B][COLOR=DarkOrchid]FROM_UNIXTIME[/COLOR][/B][COLOR=DarkOrchid]([/COLOR]`date`[COLOR=#9932cc])[/COLOR][COLOR=DarkOrchid])[/COLOR]
[COLOR=Black])[/COLOR] [B][COLOR=#9932cc]AS[/COLOR][/B] `dailyvalues`[/FONT]