[SQL] Berekenen van een totaal per maand

Pagina: 1
Acties:
  • 814 views sinds 30-01-2008
  • Reageer

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04-2025
Ik zit een beetje vast tijdens het ontwikkelen van een applicatie waarmee ik een overzicht heb van de kosten van m'n auto. Ik probeer nu een grafiek te maken waarmee ik de kosten per maand kan berekenen, maar het wil niet erg lukken.

Mijn tabel is als volgt:

SQL:
1
2
3
4
5
6
7
8
9
CREATE TABLE `kosten` (
  `kID` int(50) NOT NULL auto_increment,
  `datum` date NOT NULL,
  `soort` set('Onderdelen','Onderhoud','Overig') NOT NULL default 'Onderdelen',
  `omschrijving` text,
  `kosten` double NOT NULL,
  `bon_aanwezig` int(3) NOT NULL default '0',
  PRIMARY KEY  (`kID`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 AUTO_INCREMENT=8;


Ik heb er dus 3 records instaan, één van de maand oktober, en twee van de maand september.

Dan voer ik dus deze code uit:

PHP:
1
2
3
$sql = mysql_query("SELECT SUM(kosten) AS kosten_per_maand FROM kosten GROUP BY MONTH(datum);");
$result = mysql_fetch_assoc($sql);
print_r($result);


En ik krijg alleen dit als output:

code:
1
Array ( [kosten_per_maand] => 2931.2 )


Logisch, want ik groepeer nu alleen op de huidige maand, denk ik 8)7.

Nu probeer ik dus te groeperen per maand, maar het wil niet erg lukken. Ik heb deze pagina erbij gehad, en heb dingen geprobeerd met MONTH enzo, maar dat geeft geen resultaat.

Wie weet hoe dit wel moet ?

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:55
Je groepeert niet op de huidige maand, want je hebt nergens een WHERE.

Dit zou gewoon moeten werken:
code:
1
select sum(kosten), month(datum) from kosten group by month(datum)

https://fgheysels.github.io/


  • Pete
  • Registratie: November 2005
  • Laatst online: 31-10-2025
Dat zou betekenen dat hij nu 2 rijen terugkrijgt (1 voor de maand september en 1 voor oktober)

petersmit.eu


  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04-2025
whoami schreef op donderdag 28 september 2006 @ 22:35:
Je groepeert niet op de huidige maand, want je hebt nergens een WHERE.

Dit zou gewoon moeten werken:
code:
1
select sum(kosten), month(datum) from kosten group by month(datum)
Dan krijg ik dit terug:

code:
1
Array ( [sum(kosten)] => 2931.2 [month(datum)] => 9 )


Terwijl ik toch echt verschillende maanden in m'n database heb staan.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:55
phsmit schreef op donderdag 28 september 2006 @ 22:37:
Dat zou betekenen dat hij nu 2 rijen terugkrijgt (1 voor de maand september en 1 voor oktober)
En da's toch de bedoeling ?
Terwijl ik toch echt verschillende maanden in m'n database heb staan.
wat krijg je als output als je gewoon select month(datum) from ... doet ?

[ Voor 24% gewijzigd door whoami op 28-09-2006 22:41 ]

https://fgheysels.github.io/


Verwijderd

:? Die query die whoami geeft, zou het goede resultaat moeten geven. Weet je zeker dat overal de datum goed is ingevoerd...?

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04-2025
D'oh, ik moest het natuurlijk wel in een while loop zetten |:( |:( |:(

Wat voel ik mezelf een randdebiel.


PHP:
1
2
3
4
5
//grafiek voor kosten per maand
$sql = mysql_query("SELECT SUM(kosten) AS kosten_per_maand FROM kosten GROUP BY MONTH(datum);");
while($result = mysql_fetch_assoc($sql)) {
    print_r($result);
}


SQL:
1
2
3
4
5
6
7
8
Array
(
    [kosten_per_maand] => 2931.2
)
Array
(
    [kosten_per_maand] => 50
)


Werkt dus prima.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 25-11-2025

dusty

Celebrate Life!

Ja, helaas kan je er niet vanuit gaan dat de eerste resultaat ook de eerste maand uit je database zal zijn, dus zal je toch echt ook de month(datum) in je select terug moeten geven. Als je meerdere jaren gaat bijhouden wil je waarschijnlijk ook de jaar teruggeven en in de group by stoppen.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04-2025
dusty schreef op vrijdag 29 september 2006 @ 02:30:
Ja, helaas kan je er niet vanuit gaan dat de eerste resultaat ook de eerste maand uit je database zal zijn, dus zal je toch echt ook de month(datum) in je select terug moeten geven. Als je meerdere jaren gaat bijhouden wil je waarschijnlijk ook de jaar teruggeven en in de group by stoppen.
Klopt als een bus, dus dat doe ik nu ook :).

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
mcdronkz schreef op donderdag 28 september 2006 @ 22:45:
D'oh, ik moest het natuurlijk wel in een while loop zetten |:( |:( |:(

Wat voel ik mezelf een randdebiel.
Snel queries testen en de resultset bekijken zonder echt rekening te hoeven houden met aantal rijen ed. kan natuurlijk ook door de query even in de mysql console of iets als phpmyadmin te kloppen. :)

{signature}

Pagina: 1