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

计算布尔值平均值:SQL正常运行时间占比代码编译失败求助

解决SQL计算正常运行时间相对故障停机时间占比的问题

原代码存在的问题

  1. 两次扫描数据表,查询效率较低
  2. 若未显式触发浮点运算,可能出现整数除法导致的精度丢失(虽用float变量缓解,但仍有优化空间)
  3. 多余的SET语句可能掩盖潜在错误,不利于问题排查

优化后的SQL代码

SELECT
    COUNT(CASE WHEN Status = 1 THEN 1 END) AS UptimeCount,
    COUNT(CASE WHEN Status = 0 THEN 1 END) AS DowntimeCount,
    CASE 
        WHEN COUNT(CASE WHEN Status = 0 THEN 1 END) = 0 THEN 100
        ELSE COUNT(CASE WHEN Status = 1 THEN 1 END) * 100.0 / COUNT(CASE WHEN Status = 0 THEN 1 END)
    END AS UptimeVsDowntimeRatio
FROM dbo.[Uptimes]

代码说明

  • 仅扫描一次数据表即可完成所有统计,显著提升查询效率
  • 使用COUNT(CASE ...)直接统计对应状态的记录数,逻辑直观清晰
  • 用100.0触发浮点运算,确保计算结果的精度
  • 提前处理故障记录数为0的边界情况,避免除数为0的运行错误

排查编译问题的建议

  1. 确认表名dbo.[Uptimes]拼写正确,目标数据表确实存在
  2. 确认Status列存在且数据类型为整数或bit(bit类型判断Status=1/0同样有效)
  3. 移除SET ARITHABORT OFF;和SET ANSI_WARNINGS OFF;,开启默认设置有助于暴露潜在的语法或逻辑错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:45:48