Max views van een dag in een maand
Mijn database ziet er als volgt uit
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
Volgens mij moet zoiets werken.
Dan krijg je volgens mij een foutmelding: Invalid use of group function
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
getest, en die mag dus niet, hahaha
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Dit werkt bijvoorbeeld wel
HAVING totaal=MAX(totaal)
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
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.
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...
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.
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?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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'];
?>
$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...
Enig idee waar die 112 vandaan komt? (ligt het ook aan mij of is het wel heel toevallig het dubbele aantal van 56)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SELECT
SUM(views) AS totaal,
MAX(SUM(views)) as hoogste
FROM
stats
GROUP BY
totaal,
hoogste,
DAYOFMONTH(tijd)
HAVING
totaal=hoogste
SUM(views) AS totaal,
MAX(SUM(views)) as hoogste
FROM
stats
GROUP BY
totaal,
hoogste,
DAYOFMONTH(tijd)
HAVING
totaal=hoogste
En zo?
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
Ik heb nog even een paar keer auto laten refreshen (Opera :D) zodat hij nu 128 views heeft. Nu geeft hij 128184 weer...
is 128 en 128+56
@ Klaasjan: er mist een komma aan het einde van regel 2 van je voorbeeld.
Met komma zegt hij dit: Ongeldig gebruik van GROUP-functie
Gewijzigd op 01/01/1970 01:00:00 door Arian Stolwijk
Jan Koehoorn schreef op 25.10.2006 11:42:
@ Klaasjan: er mist een komma aan het einde van regel 2 van je voorbeeld.
Aangepast
SELECT MAX( views ) AS hoogste,
DATE_FORMAT( tijd, '%Y-%m' ) AS maand
FROM tabelnaam
GROUP BY maand
ORDER BY maand ASC
LIMIT 0 , 30
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Jan Koehoorn schreef op 25.10.2006 11:52:
Ik heb ook nog even gesnuffeld:
SELECT MAX( views ) AS hoogste,
DATE_FORMAT( tijd, '%Y-%m' ) AS maand
FROM tabelnaam
GROUP BY maand
ORDER BY maand ASC
LIMIT 0 , 30
SELECT MAX( views ) AS hoogste,
DATE_FORMAT( tijd, '%Y-%m' ) AS maand
FROM tabelnaam
GROUP BY maand
ORDER BY maand ASC
LIMIT 0 , 30
Ik mis de HAVING
@ Klaasjan: ik heb lokaal even een kleine testtabel gemaakt en daar rolden de goede waarden uit zonder dat ik HAVING nodig had, vandaar.