gpt4 book ai didi

PostgreSQL 数字字段溢出错误 - 精度为 10、比例为 1 的字段必须舍入到小于 10^9 的绝对值

转载 作者:行者123 更新时间:2023-12-04 10:20:26 26 4
gpt4 key购买 nike

请我试图找出每行中 imls2016.visits 的总和和 imls2010.visits 的总和的两个值之间的百分比差异。在我在联合声明中添加第三个表(该表为 imls_regions)之前,它以前工作正常。但是每当我运行新代码时,它都会引发数字溢出错误。我已经调整了精度和比例,但我无法纠正这个错误。请问我应该在我的代码中更改什么:
(PostgreSQL 12)

  • 错误消息:>“错误:数字字段溢出
    详细信息:精度为 10、小数位数为 1 的字段必须舍入到小于 10^9 的绝对值。
    SQL 状态:22003"

  • 我的代码:
    SELECT imlsreg.obereg,
    imlsreg.obereg_name,
    SUM(imls2016.visits) AS total_visits_2016,
    SUM(imls2010.visits) AS total_visits_2010,
    ROUND((CAST(SUM(imls2016.visits) AS decimal(10, 1)) - SUM(imls2010.visits)) / SUM(imls2010.visits) * 100, 1) AS pct_change_in_visits
    FROM imls_regions AS imlsreg INNER JOIN imls_library_survey_2016 AS imls2016
    ON imlsreg.obereg = imls2016.obereg
    INNER JOIN imls_library_survey_2010 AS imls2010
    ON imlsreg.obereg = imls2010.obereg
    WHERE imls2016.visits >= 0 AND imls2010.visits >= 0
    GROUP BY imlsreg.obereg, imlsreg.obereg_name
    ORDER BY pct_change_in_visits ASC;

    最佳答案

    当您转换到 decimal(10,1) ,您正在缩小 SUM(imls2016.visits) 的允许值范围以换取更高的精度,但这会导致您的结果溢出。

    您可以做两件事:

  • 执行 Actor 你计算SUM(imls2016.visits) - SUM(imls2010.visits)
  • 降低铸件的精度。

  • 实现第一个可能就足够了,您可以定义 pct_change_in_visits作为:
    ROUND(CAST(SUM(imls2016.visits) - SUM(imls2010.visits) AS decimal(10, 1)) / SUM(imls2010.visits) * 100, 1) AS pct_change_in_visits

    关于PostgreSQL 数字字段溢出错误 - 精度为 10、比例为 1 的字段必须舍入到小于 10^9 的绝对值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60890350/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com