【问题标题】:Treat results duplicates with UNION使用 UNION 处理重复的结果
【发布时间】:2015-11-13 12:05:20
【问题描述】:

我对这个查询有疑问:

Select id count(*)
....
....
....
....
UNION
Select id count(*)
.....
.....
.....
.....

输出是:

04123158->  32
04123158->  17
04123412->  36
04132010->  1473

我需要输出如下:

04123158->  49
04123412->  36
04132010->  1473

在 UNION 中使用两个相似的 id 时会出现问题。我希望总和只有一个结果。

我该怎么做?

【问题讨论】:

    标签: mysql sql mysql-workbench bdd


    【解决方案1】:

    你可以使用union(真的是union all)然后聚合:

    select id, sum(cnt)
    from ((select id, count(*) as cnt . . .
          ) union all
          (select is, count(*) as cnt . . .
          )
         ) i
    group by id
    

    注意:您想要union all 有两个原因。首先,union 删除重复项。因此,如果两个ids 具有相同的count(*) 值,那么union 将删除其中一行。 Union all 不会删除重复项。

    其次,union 删除重复项。这会在查询中产生不必要的开销。为什么要增加额外的性能开销?

    【讨论】:

    • mmmm 我不太明白,因为我的英语不是很好(对不起)我需要做一个联合,因为我有 2 个结构相似但数据不同的表...... 1º 选择是关于与表的关系(少于 30 天)和 2º 选择包含超过 30 天的数据...您说联合删除重复项但为什么在我的情况下没有这样做??
    • @user5552354 - 您要合并的两行不是“重复”,它们只是其中一列具有相同的值。在您的示例中,您想要分组:04123158-> 3204123158-> 17。两行共享第一列的值04123158,但第二列的值不同。如果所有列的两行都相同(例如:04123158-> 3204123158-> 32),则会出现重复。
    猜你喜欢
    • 1970-01-01
    • 2011-11-30
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    相关资源
    最近更新 更多