问题

在一次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

图例

图片描述


yinfuyuan
48 声望3 粉丝

🤫嘘!!!