Avatar billede hoppe11 Nybegynder
05. februar 2010 - 19:41 Der 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

nogen som kan give et bud på hvad der er galt?

resultatet skulle gerne blive 312500000
Avatar billede leonberger Novice
05. februar 2010 - 19:48 #1
Hej

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.

mvh
Avatar billede hoppe11 Nybegynder
05. februar 2010 - 19:56 #2
hele select ser faktisk sådan her ud

SELECT SUM(accounting.amount*vatcode.percent/(100+vatcode.percent))

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
Avatar billede hoppe11 Nybegynder
05. februar 2010 - 20:00 #3
det er mange gange denne beregning skal laves, så tror det vil tage lang tid at loade siden..

denne query skal laves to gange pr konto (konto/modkonto) og der er måske 100 kontoer
Avatar billede leonberger Novice
05. februar 2010 - 20:38 #4
Prøv:

SELECT SUM(accounting.amount*(vatcode.percent/(100+vatcode.percent)))

Nu divideres der før der multipliceres, dette kan måske forhindre overflow.

Det er rent gæt.

mvh
Jan
Avatar billede hoppe11 Nybegynder
05. februar 2010 - 20:52 #5
det er stadig det samme :(
Avatar billede leonberger Novice
05. februar 2010 - 22:22 #6
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(
Avatar billede hoppe11 Nybegynder
05. februar 2010 - 23:09 #7
ok :)

synes i hvert fald det virker mærkeligt

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?

returnerer forkert
SELECT SUM(accounting.amount*vatcode.percent/(100+vatcode.percent))

returnerer korrekt
SELECT SUM(accounting.amount*25/(100+vatcode.percent))
Avatar billede leonberger Novice
06. februar 2010 - 10:38 #8
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)

Du kan selv finde på flere.
Avatar billede bauerdata Nybegynder
06. februar 2010 - 10:47 #9
Er det muligt at der er skrammel i databasen ?
Avatar billede hoppe11 Nybegynder
06. februar 2010 - 11:30 #10
woop woop.. det hjalp efter at der blev byttet lidt rundt på tallene

SELECT SUM(vatcode.percent/(100+vatcode.percent)* accounting.amount)

smid et svar leon :)
Avatar billede leonberger Novice
06. februar 2010 - 17:22 #11
Takker.

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^)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester