超出范围整数:无穷大

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

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

  1. WITH accounts AS (
  2. SELECT t.user_id
  3. FROM table_a t
  4. WHERE t.type like '%Something%'
  5. ),
  6. CTE AS (
  7. SELECT
  8. st.x_user_id,
  9. ad.name as client_name,
  10. sum(case when st.score_type = 'Agility' then st.score_value else 0 end) as score,
  11. st.obs_date,
  12. ROW_NUMBER() OVER (PARTITION BY st.x_user_id,ad.name ORDER BY st.obs_date) AS rn
  13. FROM client_scores st
  14. LEFT JOIN account_details ad on ad.client_id = st.x_user_id
  15. INNER JOIN accounts on st.x_user_id = accounts.user_id
  16. --WHERE st.x_user_id IN (101011115,101012219)
  17. WHERE st.obs_date >= '2020-05-18'
  18. group by 1,2,4
  19. )
  20. SELECT
  21. c1.x_user_id,
  22. c1.client_name,
  23. c1.score,
  24. c1.obs_date,
  25. CAST(COALESCE (((c1.score - c2.score) * 1.0 / c2.score) * 100, 0) AS INT) AS score_diff
  26. FROM CTE c1
  27. 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#

这条线可能是你的问题:

  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值。
您可以通过更改为来解决此问题:

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

相关问题