首页 > 解决方案 > 如何根据条件删除重复项?

问题描述

我正在尝试编写一个 SQL 查询来选择所有记录。

如果发现 GROUP+SEMIGROUP 组合是重复的,我想选择填充“TOTAL”列的那个,并消除另一个。

样本输入和输出:
在此处输入图像描述

标签: mysqlsql

解决方案


我分享两个解决方案。

  1. 第一个使用分组的解决方案。
create table t (
group_ int,
semi_group VARCHAR(30),
total int,
semi_total int
);

INSERT INTO 
    t(group_, semi_group, total, semi_total)
VALUES
    (10,'A',56, null),
    (10,'A',null, 34),
    (11,'G',34, null),
    (12,'H',23, null),
    (13,'J',12, null),
    (13,'J',null, 55);
    
    
    select 
    group_, 
    semi_group, 
    sum(total) total, sum(semi_total)
    from t
    group by group_, semi_group;

  1. 使用条件,例如,如果您希望总计为空且半总计不为空,则使用半总计值,如果逆使用总计。
   select 
    group_, 
    semi_group, 
    case when sum(total) is null and  sum(semi_total) is null then
            0
        when sum(total) is null and  sum(semi_total) is not null then
            sum(semi_total)
        else    
        sum(total)
    end total
    from t
    group by group_, semi_group;

结果是这样的。

团体_ 半组 全部的
10 一个 56
11 G 34
12 H 23
13 Ĵ 12

推荐阅读