SQL查询以查找表中最常见的关联值

时间:2013-06-16 17:19:12

标签: sql

我有一个简单的SQL表,它将两个值相关联,如下所示:

table1(column1 varchar (32), column2 varchar(32));

对于column1中的每个不同值,在它的值列表中,我想找到在此表中出现次数最多的那个。

澄清的一个例子:

假设我有以下数值:

a1, b1
a2, b2
a3, b3
a4, b1
a3, b1
a3, b2
a5, b1
a6, b2

我希望的结果是:

a1, b1
a2, b2
a3, b1
a4, b1
a5, b1
a6, b2

因为b1b2在表格中出现次数最多。

1 个答案:

答案 0 :(得分:3)

这是一个很好的窗口函数应用程序。接近它的方法不止一种。这是一种方法。获取每行column2的频率。然后,使用row_number()对所有这些频率进行排名:

select column1, column2
from (select t.*,
             row_number() over (partition by column1 order by col2cnt desc) as seqnum
      from (select t.*, count(*) over (partition by column2) as col2cnt
            from t 
           ) t
     ) t
where seqnum = 1

最后一步(由最外面的查询完成)是选择排名最高的一个(具有最高计数)。

如果发生关系(即b2出现频繁b1),则此版本会选择任意值。