mySQL sum(float) daje inną wartość z joinem/bez joina

0

Mamy dwie tabele

Table Parent
ID int
TotalAmount float

Table Children
ParentID int,
ChildID int,
PaymentValue float

Przyznaje, że głupotą jest przetrzymywanie wartości finansowej jako float, ale byłem młody i głupi (jedno z tych nadal jest prawdziwe).

Proces jest następujący
Z pliku excela są ładowane dane do tabeli #Children. Następnie jest robiona na rekordach suma

select ParentID, sum(PaymentValue) as PaymentValue from #Children

Wynik tego działania daje mi dokładnie taką samą wartość jak w excelu:

ParentID PaymentValue
1000 36917.98

Następnie rozbudowuje to ww. zapytanie aby sprawdzić czy parent ma taki sam TotalAmount (co suma dzieci)

select c.ParentID, sum(c.PaymentValue) as PaymentValue, p.TotalAmount from #Children c
left join Parent p on c.ParentID = p.ID
group by c.ParentID, p.TotalAmount

I tutaj niestety dzieją się (dla mnie) jakieś dziwne rzeczy.

ParentID PaymentValue TotalAmount
100 36917.98000000001 36917.98

TotalAmount (z tabeli Parent) jest taki jak się spodziewam - 36917.98,
ale już sum(c.PaymentValue) zwraca 36917.98000000001.

Skąd te dziwne '000000001'.

Poradziłem sobie z tym problemem robią CAST wyniku sumy na decimala, ale nurtuje mnie pytanie, dlaczego podczas sumowania FLOAT bez joina jest jedna wartość a z joinem inna.

Z góry dziękuję za pomoc.

P.S. Jak dodaje tabelkę tutaj na formularzu to jak dodać aby miała więcej niż 2 kolumny?

2
HieronimBerbelek napisał(a):

P.S. Jak dodaje tabelkę tutaj na formularzu to jak dodać aby miała więcej niż 2 kolumny?

Takie tabelki robi się "blueprintem", tzn piszesz takie coś: (po prostu komórki oddzielone średnikiem ; albo pałką |)

ParentID; PaymentValue; Inne pole; jeszcze inne pole;
1000; 369137.98; inna wartość; etc;
1;12;jeszcze inna wartosć;etc;

Potem zaznaczasz wszystko

screenshot-20220517121236.png

i używasz kontrolki z tabelką. Generuje się wtedy:

screenshot-20220517121307.png

Jak chcesz coś poprawić to Ctrl+Z.

PS: @HieronimBerbelek Jak coś, to poniżej edytora jest Markdown jest obsługiwany - kliknij w niego i zobaczysz pomoc dot. edytora.

1 użytkowników online, w tym zalogowanych: 0, gości: 1