clickhouse 子查询_clickhouse两个表关联后出现几十位的小数

问题

在一次clickhouse的数据查询的时候,QA反馈说列表中某些指标数据出现了几十位的小数。开始以为是DataFormat时候bug

导致的。于是从接口入手开始跟数据,一直跟到数据源,发现几十位的小数点一直都在。最后打印了执行sql在DataGrip中执行。

发现sql产生的数据就带有几十位的小数点,详见图例。之前在clickhouse聚合查询的时候会出现小数后面数字浮动的情况,但

这种明显又是另一类的问题。

解决

于是开始分析这个几千行的sql,精简后其实主要是两个表的单独分组聚合然后再进行关联。单独执行子查询数据是正常的。

经过反复尝试后,**发现是 子查询 子查询 子查询 中使用了 select * 导致的,将这里换成具体查询的字段数据就正常了**。

这里使用*是因为报表是需要根据用户所选择的字段动态展示。

SQL

SELECT

*

FROM

(

SELECT

fieldsa,

fieldsb,

fields1c

FROM

table1

WHERE

condition1

ORDER BY

fields1c DESC

)

ANY LEFT JOIN

(

SELECT

* //将这里换成具体要查询的字段就可以了

FROM

(

SELECT

fieldsa,

fieldsb,

round(sum(fields2c) / 1, 2) AS fields2c,

round(sum(fields2d) / 1, 2) AS fields2d

FROM

table2

WHERE

condition2

GROUP BY

fieldsa,fieldsb

)

ALL FULL JOIN

(

SELECT

fieldsa,

fieldsb,

round(sum(fields3c) / 1, 2) AS fields3c,

round(sum(fields3d) / 1, 2) AS fields3d

FROM

table3

WHERE

condition3

GROUP BY

fieldsa,fieldsb

)

USING

fieldsa,fieldsb

WHERE

condition4

)

USING

fieldsa,fieldsb

图例

你可能感兴趣的:(clickhouse,子查询)