【问题标题】:Count duplicate rows only based on 2 columns仅基于 2 列计算重复行
【发布时间】:2016-06-22 09:03:09
【问题描述】:

假设我有一个名为test 的表,其中包含两列AB
A B
------
1 2
2 3
1 2
3 4
我想使用一个查询,它只返回基于列 AB 组合的重复行数(在这种情况下为 1 和 3),因此返回的计数应该是 2
@ 987654333@(查询到这里),谢谢。

【问题讨论】:

  • 如果有多个重复行,如 (1,2),(1,2),(2,3),(2,3)?你的预期结果是什么?
  • 你试过我的答案了吗?

标签: mysql sql group-by duplicates having


【解决方案1】:
SELECT A, B, COUNT(*) as Count FROM Test GROUP BY A, B HAVING COUNT(*) > 1

【讨论】:

  • 我收到以下错误代码:1241。操作数应包含 1 列
  • 也许别名为 rowCount2 而不是 Count... 其余的应该可以工作。您指出的错误似乎意味着您需要执行 count(colName) > 1 但这不太可能......
【解决方案2】:

如果我理解正确,如果您的示例中有另一行 (2,3),那么计数应该是 4。如果是这样,请使用:

SELECT 'Duplicates' as warning,sum(cnt) FROM (
    SELECT a,b,COUNT(*) as cnt
    FROM YourTable
    GROUP BY a,b
    HAVING count(*) > 1
)

【讨论】:

    【解决方案3】:

    要成对使用,

    SELECT CONCAT(A,'-',B) AS Duplicate Pair,COUNT(A) AS COUNT FROM `test` GROUP BY A,B HAVING COUNT(A) > 1;
    

    或 要获得作为个人使用,

    SELECT A AS Duplicate1,B AS Duplicate2,COUNT(A) AS COUNT FROM `test` GROUP BY A,B HAVING COUNT(A) > 1;
    

    【讨论】:

      【解决方案4】:

      您可以为此使用子查询:

      select 'Duplicates' as warning, count(*) as rowcount
      from (select a, b, count(*) as cnt
            from test t
            group by a, b
            having cnt > 1
           ) t;
      

      【讨论】:

      • 您需要在子查询中添加 HAVING 子句(参见我上面的答案)才能正确过滤,或者在 (where t.count > 1) 之后添加 where 子句。
      猜你喜欢
      • 2020-08-31
      • 2017-12-29
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 2015-12-17
      相关资源
      最近更新 更多