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

SQL使用group by聚合sum后校验求和值是否超1的方法

问题背景

现有数据库表包含ID、ratios两个字段,单ID可对应1条及以上ratios记录,样例数据如下:

IDratios
11110,004
22220,023
22220,012
33330
44440
......

已执行按ID分组求ratios总和的查询:

select ID, sum(ratios)
from table_name
group by ID;

查询得到的分组求和结果样例:

IDsum(ratios)
11111
22221
33330
44440
......

目标是校验数据合法性,排查所有对应ratios总和超过1的ID,此前尝试结合distinct查询受group by语法限制未实现预期效果。

可行方案

不需要使用distinct,直接通过HAVING子句对分组聚合后的结果做过滤即可。

  • 若需要返回所有不合法的ID及对应总和,执行以下SQL:
SELECT 
  ID, 
  SUM(ratios) AS total_ratio
FROM table_name
GROUP BY ID
HAVING SUM(ratios) > 1;

语句返回结果为空则代表所有ID的ratios总和均符合要求,无非法数据。

  • 若仅需要判断是否存在非法数据、不需要返回具体ID,可以用EXISTS写法,查询效率更高:
SELECT EXISTS(
  SELECT 1
  FROM table_name
  GROUP BY ID
  HAVING SUM(ratios) > 1
) AS has_invalid_record;

注意:样例中ratios值使用逗号作为小数分隔符(如0,004对应数值0.004),如果该字段存储类型为字符串而非数值类型,需要先替换逗号为点号、转成数值类型后再求和,否则聚合计算会出现错误,修正后的求和逻辑如下:

SUM(CAST(REPLACE(ratios, ',', '.') AS DECIMAL(10,4)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:39:20