Mysql 仅基于2列对重复行进行计数

Mysql 仅基于2列对重复行进行计数,mysql,sql,group-by,duplicates,having,Mysql,Sql,Group By,Duplicates,Having,假设下表名为test,有两列A和B ab ---- 12 23 12 34 我想使用一个查询,根据列a和B的组合,只返回重复行的计数(本例中为1和3),因此返回的计数应该是2 选择“Duplicates”作为警告,将(*)计数为test中的RowCount,其中(查询转到此处),谢谢。您可以为此使用子查询: select 'Duplicates' as warning, count(*) as rowcount from (select a, b, count(*) as cnt f

假设下表名为
test
,有两列
A
B

ab

----

12

23

12

34

我想使用一个查询,根据列
a
B
的组合,只返回重复行的计数(本例中为1和3),因此返回的计数应该是
2


选择“Duplicates”作为警告,将(*)计数为test中的RowCount,其中
(查询转到此处),谢谢。

您可以为此使用子查询:

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;

如果我理解正确,如果示例(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
)
要获得配对使用

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;

您需要在子查询中添加HAVING子句(请参见上面的答案),以便正确过滤,或者在(t.count>1)之后添加where子句。如果有多个重复行,如(1,2)、(1,2)、(2,3)、(2,3)?你期望的结果是什么?你试过我的答案吗?我得到以下错误代码:1241。操作数应包含1列,可能别名为rowCount2而不是Count。。。剩下的应该有用。您指出的错误似乎意味着您需要执行count(colName)>1,但这不太可能。。。
SELECT A AS Duplicate1,B AS Duplicate2,COUNT(A) AS COUNT FROM `test` GROUP BY A,B HAVING COUNT(A) > 1;