SQL:根据大多数出现次数选择不同的配对值

时间:2017-02-01 12:29:41

标签: sql sql-server

我有以下查询:

SELECT Distinct Contract, Description
FROM Statement

通常每个合同都有一个描述,反之亦然。 然而,合同可能会有拼写错误。这导致两行应该是同一对实例。

这有问题,我正在寻找一种解决方法。 如果不匹配,我希望比较每种描述的可能合同的频率,并只选择最常见的频率。

例如:

Contract        Description
  X                XX
  X                XX
  Y                YY
  A                XX

查询将返回三对:

  X : XX
  Y : YY
  A : XX

我希望修复它,以便它只返回以下对:

  X : XX
  Y : YY

欢迎提出任何建议 我正在使用SQL Server。

1 个答案:

答案 0 :(得分:4)

使用row_number()

select description, contract
from (select description, contract, count(*) as cnt,
             row_number() over (partition by description order by count(*) desc) as seqnum
      from t
      group by description, contract
     ) t
where seqnum = 1;

您要查找的内容在统计信息中有一个名称。它被称为mode。这是一组数据(或特定组)中最常见的值。

注意:以上内容将为每个description返回一个唯一模式。可以有联系。如果您需要所有值,请使用rank()dense_rank()代替row_number()

在rextester上进行测试:http://rextester.com/MODKIE76399