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

MySQL无唯一ID时如何删除冗余Amount=0行

解决无唯一ID的MySQL表删除指定记录问题

需求:删除表中存在非0 Amount记录的ClientID对应的所有Amount=0的行;保留那些仅存在Amount=0记录的ClientID的行。

方法一:MySQL 8.0+ 用窗口函数实现

DELETE t
FROM (
    SELECT 
        ClientID,
        Amount,
        COUNT(CASE WHEN Amount != 0 THEN 1 END) OVER (PARTITION BY ClientID) AS has_non_zero
    FROM your_table_name
) t
WHERE t.Amount = 0 AND t.has_non_zero > 0;

说明:通过窗口函数COUNT(...) OVER (PARTITION BY ClientID)统计每个ClientID下的非0记录数,若该数值大于0,就删除该ClientID下所有Amount=0的行。

方法二:兼容低版本MySQL(无窗口函数)

DELETE FROM your_table_name
WHERE Amount = 0 
AND ClientID IN (
    SELECT DISTINCT ClientID 
    FROM your_table_name 
    WHERE Amount != 0
);

说明:先通过子查询筛选出所有存在非0金额的ClientID列表,再删除这些ClientID中金额为0的记录。

验证示例

用你提供的测试数据执行上述任一语句后,会删除QER1、QER2对应的Amount=0行,保留QER3的0值行及所有非0记录,与预期输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:41:15