从行组合中查找重复项

Posted

技术标签:

【中文标题】从行组合中查找重复项【英文标题】:find duplicate from combination of rows 【发布时间】:2018-09-14 06:25:42 【问题描述】:

我有如下表格:-

SampleId1   SampleId2    
1              2    
1              2    
2              2    
3              2    
1              4 
2              4    
2              4    
3              5

我想找到重复的组合

例如。 SampleId2 在前两行有 SampleId1 的重复值

预期结果:-

SampleId1  SampleId2    
1             2    
2             4

我试过了:-

SELECT
    SampleId1 , SampleId2, COUNT(*)
FROM
    tablename
GROUP BY
    SampleId1 , SampleId2
HAVING 
    COUNT(*) > 1

但是这个查询没有给我预期的结果。

【问题讨论】:

您的查询没有给您预期的结果吗? 不.. 它没有 您目前的结果有什么不妥之处? Your query is working exactly as expected。你一定是打错字了。 我认为你已经简化了你正在做的事情,我们这里的问题是你的简化版本绝对可以满足你的需求。我怀疑你需要看看你的真实版本与简单版本有何不同。 【参考方案1】:

您只想删除查询中的计数,因此您可以尝试使用以下计数。

SELECT
    SampleId1 , SampleId2
FROM
    Test_group
GROUP BY
    SampleId1 , SampleId2
HAVING 
    COUNT(1) > 1;

【讨论】:

【参考方案2】:

我认为您只是不想在您的选择中投射计数结果,否则您的预期结果和查询所有 100% 正确的事情只需从选择中删除 count(*)

SELECT
    SampleId1 , SampleId2
FROM
    t
GROUP BY
    SampleId1 , SampleId2
HAVING 
    COUNT(*) > 1

SampleId1   SampleId2
1             2
2             4

【讨论】:

【参考方案3】:

你想得到重复的行,这就是解决方案

SELECT a.*
FROM docs a
JOIN (
    SELECT SampleId1, SampleId2, COUNT(*)
    FROM docs 
    GROUP BY SampleId1, SampleId2
    HAVING count(*) > 1 
) b
ON a.SampleId1 = b.SampleId1
AND a.SampleId2 = b.SampleId2
Group BY SampleId1
ORDER BY a.SampleId2

查看结果here

【讨论】:

不。不修。 (1) count(*) 表达式应该有一个别名。 (2) SELECT a.*GROUP BY a.SampleId1 ?请在将其作为答案发布之前测试您的查询,除非您确定您的查询有效 @Squirrel 我测试过here 没问题 OP 没有使用mysql

以上是关于从行组合中查找重复项的主要内容,如果未能解决你的问题,请参考以下文章

查找 MySQL 数据库中两列组合的重复项

如何使用字典对象从工作表中的重复标题中查找和组合数据

快速的独特组合(来自有重复的列表),无需查找

在excel中查找两列的组合,一列中有一个条件

python Python理解以查找列表中所有可能的项组合

在 Array、Javascript 中查找重复项