我有一个简单的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
因为b1
和b2
在表格中出现次数最多。
答案 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
),则此版本会选择任意值。