Десятичная шкала в Redshift после деления на литерал - PullRequest
0 голосов
/ 12 марта 2019

Пытаясь понять это поведение

 CREATE TABLE tab (x DECIMAL(10,0), y DECIMAL(10,0))
 INSERT INTO tab VALUES(1, 3)

select x / y from tab вернет 0,3333 .... до 11 десятичных знаков в соответствии с правилами в документах Redshift .

Что я не понимаю, так это то, что: если я делю на литерал, приведенный к тому же типу (x / 3::decimal(10,0)), я получаю ровно 4 десятичных знака (0.3333)

Как получить более точный контроль точности / масштаба результата, кроме записи коэффициента сначала в таблицу или хуже, используя float?

1 Ответ

1 голос
/ 12 марта 2019

используя таблицу примеров вашего примера

select x / y,
       ((x/ 3::decimal)),
       ((x/ (select 3)::decimal)),
       ((x/ (select 3)::decimal))::decimal(10,6)
       from tab;

возвращает

0,33333333333 0,3333 0,3333333333333333333 0,333333

Вы видите в третьем примере, что замена вашего 3 :: десятичного на (выберите 3) :: десятичный значительно повысила точность.

Если вам нужно установить точность вывода, вы можете сделать это, как в моем 4-м примере ((x/ (select 3)::decimal))::decimal(10,6)

...