SQL kennt natürlich auch noch den Typ Decimal für die Arithmetik, da Float ja Fließkomma ist.
SQL versucht halt, bei Zwischenergebnissen so viele Nachkommastellen wie möglich zu verwenden, was bei Divisionen schon mal knapp werden kann. Das führt auch schon mal dazu, dass mit decimal(31, 29) gerechnet wird und in der Folge sogar zu Dezimalfeldüberlauf.
Wenn dann auch noch aggregiert wird, muss u.U. das maximum herausgeholt werden.
Aus sum(dec(11,2)) wird dann auch schon mal ein dec(31, 18).
Eine tatsächliche Regel daraus abzuleiten habe ich mir abgewöhnt und rechne nun z.T. mit Zwischenergebnissen, gerade um Integerarithmetik zu vermeiden.

select sum(1,25), dec( sum(1,25 / 100,00 ), 15, 4) * 19,00 from datei where uniquekey in(1, 2)

Wobei der Zwangscast ab und an auch leider ignoriert wird.