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

如何对Food表中指定分析物按箱号统计有效数值之和?

解决按箱号统计特定分析物有效数值之和的SQL问题

嘿,我来帮你搞定这个统计需求!首先咱们明确核心要求:按BoxNumber分组,只计算Analyte为ana1、ana3、ana4的记录中,AnalyteVal是有效数值(排除非数值如2f和NULL)的总和。

你尝试中的问题

你的初步写法有几个需要修正的小问题:

  • 拼写错误:BoxNumer应该是BoxNumber
  • 逻辑偏差:你把ISNUMERIC(AnalyteVal)的判断结果转成DECIMAL求和,这其实是在统计符合条件的记录数,而非数值本身的和
  • 缺少过滤条件:没有限定只统计指定的Analyte,会把不需要的ana2记录也包含进来

正确的SQL写法

SELECT 
    BoxNumber,
    SUM(CAST(AnalyteVal AS DECIMAL(10,2))) AS AnalyteVal
FROM 
    Food
WHERE 
    Analyte IN ('ana1', 'ana3', 'ana4')  -- 锁定需要统计的目标分析物
    AND ISNUMERIC(AnalyteVal) = 1  -- 筛选可转换为数值的AnalyteVal
    AND AnalyteVal IS NOT NULL  -- 明确排除NULL值(ISNUMERIC(NULL)返回0,此步可省略但逻辑更清晰)
GROUP BY 
    BoxNumber
ORDER BY 
    BoxNumber;

逻辑拆解

  1. 过滤目标分析物:用IN子句精准锁定ana1、ana3、ana4,直接排除不需要的ana2记录
  2. 筛选有效数值:ISNUMERIC(AnalyteVal) = 1确保只处理能转成数值的内容,像2f这类非数值会被过滤掉
  3. 分组求和:按BoxNumber分组后,将符合条件的AnalyteVal转换为DECIMAL类型再求和,得到每个箱号的有效数值总和

结果验证

用你提供的原始数据测试该SQL,会得到完全符合预期的结果:

BoxNumberAnalyteVal
111.00
25.00
32.00

如果不需要小数位,可将DECIMAL(10,2)改为INT,结果会以整数形式呈现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:07:20