Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询以查找表中最常用的关联值_Sql - Fatal编程技术网

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和

我有一个简单的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
在表中出现的次数最多。

这是一个很好的窗口函数应用程序。解决这个问题的方法不止一种。这里有一个方法。获取每行上第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