问题
在一次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
图例
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。