超出范围整数:无穷大

mfpqipee  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(391)

因此,我正在努力解决一个有点难以解释的问题,我无法公开我正在处理的任何数据,但我试图绕过的是下面运行下面的查询时出现的错误-我已经重命名了一些表/列的敏感性问题,但结构应该是相同的
“查询引擎出错-超出整数范围:无穷大”

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和硬代码2id去掉到我注解掉的where子句中时,它会返回我想要的数据。但我也需要它运行的基础上,第一个cte有~5k的唯一id的
如果我尝试使用2个id,下面是一个示例输出:

基于上面每个id返回的行数,我希望它应该返回5000*3行=150000。
什么可能导致整数错误超出范围?

b0zn9rqh

b0zn9rqh1#

这条线可能是你的问题:

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

相关问题