【问题标题】:Out of range integer: infinity超出范围的整数:无穷大
【发布时间】:2020-05-21 18:26:01
【问题描述】:

所以我正在尝试解决一个有点难以解释的问题,并且我无法公开我正在使用的任何数据,但我试图弄清楚的是运行时出现以下错误下面的查询 - 我已经重命名了一些敏感问题的表/列,但结构应该是相同的

“来自查询引擎的错误 - 超出整数范围:无穷大”

WITH accounts AS (

  SELECT t.user_id

  FROM table_a t
  WHERE t.type like '%Something%'

),

CTE AS (

 SELECT 

 st.x_user_id,
 ad.name as client_name,
 sum(case when st.score_type = 'Agility' then st.score_value else 0 end) as score,
 st.obs_date,
 ROW_NUMBER() OVER (PARTITION BY st.x_user_id,ad.name ORDER BY st.obs_date) AS rn

 FROM client_scores st

 LEFT JOIN account_details ad on ad.client_id = st.x_user_id
 INNER JOIN accounts on st.x_user_id = accounts.user_id

--WHERE st.x_user_id IN (101011115,101012219)

 WHERE st.obs_date >= '2020-05-18'

 group by 1,2,4
  )

SELECT

 c1.x_user_id,
 c1.client_name,
 c1.score,
 c1.obs_date,
 CAST(COALESCE (((c1.score - c2.score) * 1.0 / c2.score) * 100, 0) AS INT) AS score_diff


FROM CTE c1

LEFT JOIN CTE c2 on c1.x_user_id = c2.x_user_id and c1.client_name = c2.client_name and c1.rn = c2.rn +2

我知道该查询确实有效,因为当我将第一个 CTE 和硬编码 2 id's 去掉到 where 子句中时,我注释掉它返回我想要的数据。但我还需要它基于第一个 CTE 运行,该 CTE 具有 ~5k 唯一 ID

如果我尝试使用 2 个 id,这是一个示例输出:

根据上述每个 id 返回的行数,我预计它应该返回 5000 * 3 行 = 150000。

什么可能导致整数错误超出范围?

【问题讨论】:

    标签: sql presto


    【解决方案1】:

    这行可能是你的问题:

    CAST(COALESCE (((c1.score - c2.score) * 1.0 / c2.score) * 100, 0) AS INT) AS score_diff
    

    当 c2.score 的值为 0 时,1.0/c2.score 将为无穷大,不适合您尝试将其转换为的整数类型。

    它适用于您示例中的两个用户的原因是他们的 c2.score 没有 0 值。

    您可以通过更改为来解决此问题:

    CAST(COALESCE (((c1.score - c2.score) * 1.0 / NULLIF(c2.score, 0)) * 100, 0) AS INT) AS score_diff
    

    【讨论】:

    • 超级骗子谢谢!实际上,我昨晚很晚才向后工作,并且也建立了相同的方法,但是我在 CTE SELECT 语句中使用了 NULLIF 修复,而不是它不起作用:D
    猜你喜欢
    • 1970-01-01
    • 2018-03-03
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2022-08-12
    • 2016-04-28
    相关资源
    最近更新 更多