You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode SQL《游戏玩法分析IV》代码除法结果异常原因咨询

问题根源与修复原理解析

原代码返回0的问题根源

PostgreSQL 中,当两个整数类型的值执行除法时,会触发整数除法规则——只保留商的整数部分,直接舍去小数部分。

你的代码里,count(player_id) 和子查询中的 count(distinct player_id) 返回的都是 bigint(整数类型)。假设符合条件的玩家数是 N,总玩家数是 M,且 N < M,那么 N/M 会被直接计算为整数 0,后续的 round(0, 2) 自然也只会返回 0。

::numeric 修复问题的原因

::numeric 是 PostgreSQL 里的类型转换语法,它把整数类型的计数结果转换成了 高精度数值类型(numeric/decimal)。

当两个 numeric 类型的值进行除法运算时,PostgreSQL 会执行精确小数除法,保留完整的小数部分。比如 3/10 会得到 0.3 而非 0,再经过 round(..., 2) 处理后就能得到正确的两位小数结果。

举个实际对比例子:

  • 整数除法:3::bigint / 10::bigint = 0
  • 数值除法:3::numeric / 10::numeric = 0.3

内容的提问来源于stack exchange,提问作者qanqanqan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 19:12:31