aantal uitslagen per jaar
In mijn database heb ik o.a een veld datum (date) en een vel uitslag.
Nu wil ik dat er gekeken word hoe vaak er een bepaalde uitslag(in dit geval nummer 1) per jaar voorkomt. en dat ook getoond word.
hoe doe ik dat?
Voorbeeld:
overwinningen in 2008: 12x
overwinningen in 2007: 8x
overwinningen in 2006: 15x
Ik dacht iets met count maar weet het niet.
Dit is mijn code tot nu toe:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?
$query =
"SELECT datum, COUNT(`uitslag`) AS uitslag FROM wedstrijden
WHERE uitslag=1
GROUP BY datum
ORDER BY datum DESC";
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_assoc($result))
{
?>
$query =
"SELECT datum, COUNT(`uitslag`) AS uitslag FROM wedstrijden
WHERE uitslag=1
GROUP BY datum
ORDER BY datum DESC";
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_assoc($result))
{
?>
<table>
<tr>
<td></td>
<td></td>
</tr>
</table>
Ik hoop dat jullie mijn bedoeling snappen
dus
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
$query =
"SELECT datum, COUNT(`uitslag`) AS uitslag FROM wedstrijden
WHERE uitslag=1 AND datum >= "2008-1-1" AND datum <= "2008-12-31"
GROUP BY datum
ORDER BY datum DESC";
?>
$query =
"SELECT datum, COUNT(`uitslag`) AS uitslag FROM wedstrijden
WHERE uitslag=1 AND datum >= "2008-1-1" AND datum <= "2008-12-31"
GROUP BY datum
ORDER BY datum DESC";
?>
Als je meerdere jaren wilt weten moet je meerdere keren die query uitvoeren.
Code (php)
1
2
3
4
5
2
3
4
5
SELECT YEAR(datum) AS jaar, COUNT(uitslag) AS aantal, uitslag
FROM wedstrijden
WHERE uitslag=1
GROUP BY jaar
ORDER BY jaar DESC;
FROM wedstrijden
WHERE uitslag=1
GROUP BY jaar
ORDER BY jaar DESC;
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
Een mogelijk andere oplossing:
Code (php)
1
2
3
4
2
3
4
SELECT YEAR(datum) Jaar, COUNT(uitslag)
FROM wedstrijden
GROUP BY YEAR(datum)
ORDER BY YEAR(datum);
FROM wedstrijden
GROUP BY YEAR(datum)
ORDER BY YEAR(datum);
Een DBMS selecteerd eerst alles uit de tabellen, filtert vervolgens a.d.h.v. WHERE, groepeert hierna volgens de GROUP BY, filtert vervolgens op HAVING, sorteert volgens ORDER BY voert de LIMIT uit en uit dat resultaat worden pas de kolommen geselecteerd.
Het laatste wat ik schrteef werkt. Ik weet niet of je het eerder over mijn eerste post had, maar de GROUP BY werkt wel.
Volgens wat ik geleerd heb zou het niet werken namelijk, echter als het in de praktijk werkt boeit de theorie niet meer toch? :P
My thoughts exactly. :)
Code (php)
1
2
3
4
5
2
3
4
5
<?$query = "SELECT YEAR(datum) AS jaar, COUNT(uitslag) AS aantal, uitslag
FROM wedstrijden
WHERE uitslag=1
GROUP BY jaar
ORDER BY jaar DESC";?>
FROM wedstrijden
WHERE uitslag=1
GROUP BY jaar
ORDER BY jaar DESC";?>
En deze werkt alleen hij telt de aantal nummer 1 niet.
Hoe moet ik dat oplossen
EDIT:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?
"SELECT YEAR(datum) AS jaar, COUNT(uitslag), SUM(uitslag) AS totaal, uitslag
FROM wedstrijden
WHERE uitslag=1
GROUP BY jaar
ORDER BY jaar DESC";
?>
"SELECT YEAR(datum) AS jaar, COUNT(uitslag), SUM(uitslag) AS totaal, uitslag
FROM wedstrijden
WHERE uitslag=1
GROUP BY jaar
ORDER BY jaar DESC";
?>
zo werkt het thx
Gewijzigd op 01/01/1970 01:00:00 door Roland Braat
Voor een volledig correcte query zou je ook nog moeten groeperen op de kolom uitslag. Het zal in dit geval voor het resultaat geen verschil maken, maar in een GROUP BY hoor je nu eenmaal alle kolommen op te nemen die in de SELECT staan en geen onderdeel zijn van een verzamelingsfuncties zoals COUNT() of SUM().