SQL查询以查找表中最常用的关联值
我有一个简单的SQL表,它将两个值关联起来,如下所示:SQL查询以查找表中最常用的关联值,sql,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 因为b1和
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
在表中出现的次数最多。这是一个很好的窗口函数应用程序。解决这个问题的方法不止一种。这里有一个方法。获取每行上第2列的频率。然后,使用行编号()
对所有这些频率进行排序:
最后一步(由最外层的查询完成)是选择一个具有最高秩(即具有最高计数)的查询
如果出现ties(即如果
b2
与b1
一样频繁出现),那么这个版本将选择一个任意值。您使用的是什么RDBMS?我现在使用的是HSQL,但我不介意切换到任何可移植的东西。我必须研究“分区依据”和这里使用的星形运算符。这不在我们的“傻瓜SQL”课程中:-)我将报告我的发现。我现在不能同意,但你似乎知道你的方法。。。
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