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

如何找出存在多笔不同Accum_Amt的会员?SQL实现方案咨询

找出存在不同累计金额的会员的最优实现

完全不需要用游标或者函数,基于集合的聚合查询是最简单高效的实现方式,这也是SQL的核心优势——避免逐行处理,直接对数据集进行批量操作。

方法一:用COUNT(DISTINCT)聚合筛选

这是最直观的写法:按会员ID分组后,统计该会员下不同累计金额的数量,只要数量大于1,就说明该会员存在多笔不同金额的记录:

SELECT MemberId
FROM 你的表名
GROUP BY MemberId
HAVING COUNT(DISTINCT Accum_Amt) > 1;

方法二:用EXISTS子查询

如果表数据量极大,或者需要提前过滤部分数据,可以用EXISTS子查询,定位存在同会员但金额不同的记录:

SELECT DISTINCT t1.MemberId
FROM 你的表名 t1
WHERE EXISTS (
    SELECT 1
    FROM 你的表名 t2
    WHERE t2.MemberId = t1.MemberId
      AND t2.Accum_Amt <> t1.Accum_Amt
);

为什么不用游标/函数?

游标是逐行遍历数据,代码冗余且数据量大时性能极差;函数(尤其是标量函数)同样是逐行调用,效率远低于集合查询。这种场景下用游标或函数属于过度设计,完全没必要。

用你提供的测试数据验证,以上两种写法都会返回期望的1300和1400。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:52:40