Examples of DECIMAL Calculations
This section contains some examples that demonstrate how Yellowbrick handles calculations that involve DECIMAL
columns and constants.
Multiplication Examples
This example shows the resulting precision and scale when two DECIMAL
values are multiplied:
premdb=# select avg_att, avg_att*1.1 att11 from team where avg_att>50;
avg_att | att11
---------+---------
59.944 | 65.9384
54.041 | 59.4451
75.286 | 82.8146
(3 rows)
The avg_att
column is a 5,3
column. 1.1
is a 2,1
constant value. The resulting precision and scale is 6,4
.
Assume that a table named dec385
contains a DECIMAL(38,5)
column. The column contains two values:
premdb=# select * from dec385;
c1
-----------------------------------------
955555555555555555555555555555555.55553
999999999999888777666555444333222.11111
(2 rows)
An attempt to multiply these values with a DECIMAL value greater than 1 returns an overflow error. The resulting precision and scale for the multiplication is (40,6)
, computed from (38,5)+(2,1)
. Yellowbrick DECIMAL values have a maximum precision of 38
, of which 6 digits are retained for the scale (for multiplication). The calculated values in this example do not fit into a (38,6)
column, so the query returns an overflow error.
premdb=# select c1*1.1 from dec385;
ERROR: numeric value out of range
Addition Examples
This example adds (38,5)
column values to a (38,9)
constant value. The scale of the result is not reduced, and the query returns an overflow error.
premdb=# select c1+12345678912345678912345678912.123456789 from dec385;
ERROR: numeric value out of range
This query will run if you manually cast the result:
premdb=# select c1+12345678912345678912345678912.123456789::decimal(38,5) from dec385;
?column?
------------------------------------------
955567901234467901234467901234467.67899
1000012345678801123345467790012134.23457
(2 rows)
Assume that the dectest
table has two DECIMAL(7,2) columns, dec1
and dec2
. The following functions yield results that are DECIMAL(38,2):
sum(dec1) = decimal(38,2)
sum(dec2) = decimal(38,2)
The addition of these two columns also yields a DECIMAL(38,2)
column:
sum(decimal(38,2)) + sum(decimal(38,2)) = decimal(38,2)
Parent topic:DECIMAL