问题在一次clickhouse的数据查询的时候,QA反馈说列表中某些指标数据出现了几十位的小数。开始以为是DataFormat时候bug导致的。于是从接口入手开始跟数据,一直跟到数据源,发现几十位的小数点一直都在。最后打印了执行sql在DataGrip中执行。发现sql产生的数据就带有几十位的小数点,详见图例。之前在clickhouse聚合查询的时候会出现小数后面数字浮动的情况,但这种明显又是另一类的问题。解决于是开始分析这个几千行的sql,精简后其实主要是两个表的单独分组聚合然后再进行关联。单独执行子查询数据是正常的。经过反复尝试后,发现是 子查询 子查询 子查询 中使用了 select * 导致的,将这里换成具体查询的字段数据就正常了。这里使用*是因为报表是需要根据用户所选择的字段动态展示。SQLSELECT *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图例