问题:Decimal result’s scale is less than argument’s one. (ARGUMENT_OUT_OF_BOUND)
出错的SQL:
SELECT
a.column1,
a.column2 / a.column3
FROM
a
查看a表的DDL:
CREATE TABLE a
(
`date` DateTime DEFAULT toDateTime(now())
`column1` String DEFAULT '' ,
`column2` Decimal(18, 2) DEFAULT 0 ,
`column3` Decimal(18, 5) DEFAULT 0
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(date)
ORDER BY (column1)
SETTINGS index_granularity = 8192;
报错原因:
- 由于column2的精度小于,column3的精度,导致语句报错
涉及知识点:
- click house中两个
Decimal(P,S)
类型的数据的四则运算设计的规模计算,如下:
- 加:max(S1,S2)
- 减:max(S1,S2)
- 乘:S1+S2
- 除:
被除数[Decimal(P1,S1)] / 除数[Decimal(P2,S2)]
,其中S1≥S2
解决办法
ALTER TABLE a MODIFY COLUMN column1 Decimal(18,5);
- 利用
CAST
或者toDecimal()
语句对想要修改的列进行规模修正;