Hoi

Mijn database ziet er als volgt uit

id       | INT
tijd     | DATETIME
views | INT


Nu wil ik het aantal views van een dag berekenen.
Dit gaat nog wel... gewoon met de SUM(views) funcite om het aantal views op een dag te berekenen.

Maar dat wil ik niet... ik wil het maximum aantal views per dag van een maand berekenen.

Bijvoorbeeld
op dag 1 zijn er 10 views
op dag 2 zijn er 15 views
op dag 3 zijn er 5 views
op dag 4 zijn er 25 views
op dag 4 zijn er 15 views

Dan moet hij dus als output 25 geven. En dit gedurende één maand (dus 31 dagen)

Hoe kan ik dit berekenen ??

Groeten,
Arian
SELECT SUM(views) AS totaal FROM tabel WHERE totaal=MAX(totaal)

Volgens mij moet zoiets werken.
Dan krijg je volgens mij een foutmelding: Invalid use of group function
@ Robert: MAX in een WHERE mag niet. Ik zou het zo doen:

SELECT SUM(views) AS totaal
FROM tabel
GROUP BY DAY_OF_MONTH(tijd)
ORDER BY totaal DESC
LIMIT 1

al moet ik eerlijk zeggen dat ik niet weet of die DAY_OF_MONTH in een GROUP BY mag.
[edit]
getest, en die mag dus niet, hahaha
[/edit]
Je kan wel met HAVING het maximum views selecteren.
Dit werkt bijvoorbeeld wel

HAVING totaal=MAX(totaal)
@Jan
Volgens mij wil GROUP BY wat je al zei inderdaad niet
Ik krijg deze error: Er is iets fout in de gebruikte syntax bij '(tijd) ORDER BY totaal DESC LIMIT 1' in regel 6
Net weer even gekeken, en dit mag wel:

GROUP BY DAYOFMONTH(datumtijd)

ik had de functienaam dus fout. Of het ook het gewenste resultaat oplevert, is vers twee.

@ Barman: klopt. Het regeltje is dus eigenlijk zo: als je een aggregate functie in een WHERE wilt hebben, moet je HAVING gebruiken.
@Barman:
Met deze sql: SELECT SUM(views) AS totaal FROM stats HAVING totaal=MAX(totaal)
Krijg ik deze error: Onbekende kolom 'totaal' in having clause
Dus dat wil ook niet...
@arjan
wel ff bij de les blijven en lezen wat er fout gaat: Onbekende kolom, dan moet er bij jou toch ergens een lampje gaan rinkelen. Laat ik eens een andere kolom invullen en kijken wat er dan gebeurt. nu ben ik zelf niet sql wizzerd, maar ik geloof dat jan zijn oplossing de beste is in dit geval, en dan zelf de kolommen even aanpassen!
Jan Koehoorn schreef op 25.10.2006 11:11
Net weer even gekeken, en dit mag wel:

GROUP BY DAYOFMONTH(datumtijd)

ik had de functienaam dus fout. Of het ook het gewenste resultaat oplevert, is vers twee.

@ Barman: klopt. Het regeltje is dus eigenlijk zo: als je een aggregate functie in een WHERE wilt hebben, moet je HAVING gebruiken.


Even een vraagje/ opmerking tussendoor..
Als je groepeerd op DAYOFMONTH(datumtijd) krijg je dan niet oook dag 1 van maand 1 en dag 1 van maand 2 bij elkaar?
<?php
$max_sql = "
SELECT
SUM(views) AS totaal
FROM
stats
GROUP BY
DAYOFMONTH(tijd)
ORDER BY
totaal DESC
LIMIT 1
";
$max_res = mysql_query($max_sql) or die(mysql_error());
$max = mysql_fetch_assoc($max_res);
echo $max['totaal'];

?>

Met deze code zegt hij: 56112
Dit lijkt mij vrij sterk, omdat het maar 56 is...

Reageren