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

SQL计算用户已通过合格课程占比异常:仅返回0或100%

问题描述

尝试计算用户已通过的合格课程占比,但执行以下SQL查询时,返回的占比结果只有0或100%,不符合预期:

Select passed_courses, eligible_courses, (passed_courses/eligible_courses) * 100 as 'PERCENT'
FROM Training

查询结果:

passedeligiblePERCENT
250
450
55100
360
460
450
问题原因

这是整数除法特性导致的:你的passed_courses和eligible_courses都是整数类型,数据库在执行整数间的除法时,会直接舍弃小数部分,只保留整数结果。比如2/5的结果是0,乘以100后还是0;只有当分子等于分母时,5/5=1,乘以100才会得到100。

解决方案

只需要在计算时强制将运算转换为浮点/小数运算即可,有两种常用方式:

方式1:将其中一个字段转换为小数类型

SELECT 
  passed_courses, 
  eligible_courses, 
  (CAST(passed_courses AS DECIMAL(10, 2)) / eligible_courses) * 100 AS PERCENT
FROM Training

方式2:用1.0乘以分子,触发浮点运算

这种写法更简洁,无需显式转换类型:

SELECT 
  passed_courses, 
  eligible_courses, 
  (passed_courses * 1.0 / eligible_courses) * 100 AS PERCENT
FROM Training

如果需要控制结果的小数位数,可以用ROUND函数:

SELECT 
  passed_courses, 
  eligible_courses, 
  ROUND((passed_courses * 1.0 / eligible_courses) * 100, 2) AS PERCENT
FROM Training

上述代码会将占比结果保留2位小数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:07:09