05. februar 2010 - 19:41Der er
10 kommentarer og 1 løsning
sum() giver et vanvittigt resultat
jeg har en query som giver et fuldstændigt vanvittigt resultat
query'en returnerer kun en enkelt række i mit forsøg som den laver en sum på..
SELECT SUM(accounting.amount*vatcode.percent) FROM $this->db.accounting accounting INNER JOIN $this->db.vatcode vatcode ON vatcode.id=accounting.vatcode_id WHERE accounting.account_id='$account_id'
hvis jeg ændrer select til følgende: SELECT SUM(accounting.amount) - returneres 12500000
hvis jeg ændrer select til følgende: SELECT SUM(vatcode.percent) - returneres 25
men hvis jeg vælger at gange de to tal sammen i min sum som i den øverste query får jeg 18446744073397051616
Uden at vide hvad der sker så ligner det noget overflow. Kan du ikke lave multiplikationen bagefter? Altså hente de to værdier enkeltvis og gange dem sammen.
jeg kan sagtens have vatcode.percent i den sidste del hvor jeg lægger 100 til, men så snart jeg lægger den ind og ganger op på amount får jeg et vildt tal
som her SUM(accounting.amount/(100+vatcode.percent))
den sidste returnerer den rigtige værdi.. synes det virker meget mystisk
Så skal der nok nogle med mere DB erfaring på banen, det kan være SELECT statementet der laver numre - jeg ved ikke om parenteser har betydning i SUM el. ej. Der kan være mange faktorer der spiller ind her. Jeg er desværre blank nu. 8(
det er åbenbart den ene vatcode.percent der laver ravache.. skifter jeg den ud med det specifikke tal regner den korrekt.. det er bare underligt at vatcode.percent optræder et andet sted også hvor den åbenbart indeholder den rigtige værdi?
Tja, det lugter lidt af at der sker noget der ikke skulle ske ved accounting.amount*vatcode.percent. Jeg ville nok prøve at lege lidt med forskellige SELECT for at spore mig ind på hvad der forårsager problemet. F.eks. SELECT SUM(accounting.amount*vatcode.percent) SELECT SUM(accounting.amount*25)) SELECT SUM(vatcode.percent/(100+vatcode.percent)) SELECT SUM(25/(100+vatcode.percent))
for at se hvor der opstår nogle forskelle.
Forøg evt. også med SELECT SUM(vatcode.percent/(100+vatcode.percent)* accounting.amount) SELECT SUM(25/(100+vatcode.percent)* accounting.amount)
Godt det blev løst, desværre uden at finde ud af den egentlige årsag. Håber ikke du løber ind i det igen. Med lidt held kommer der en kommentar der kan forklare problemet 8^)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.