[英]Select most frequent
如果可能,我会使用sql查找表中出现的最频繁的数字对。 即:我有几列填充数字:
num1, num2, num3, num4, num5, num6
2 3 4 5 6 7
当然,行数更大,但是您有个主意。目标是显示例如10对数字,这些数字出现在行中。
请让我知道是否可能,否则我应该执行一种“强力”解决方案。
问候
尝试这个。
SELECT TOP 10 num1, num2, num3, num4, num5, num6
FROM MyTable
GROUP BY num1, num2, num3, num4, num5, num6
ORDER BY COUNT(*) DESC
将GROUP BY与您要在元组中使用的所有不同列一起使用。 然后,按COUNT函数排序。 这将获得所有不同数字集的列表。 要限制结果数量,请在SELECT语句中包括TOP 10。
注意:原始帖子同时具有MySql和sql-server标记。 此解决方案在SQL Server中有效。 在MySql中,TOP功能不存在,您需要使用具有类似功能的LIMIT 。 如果您需要更多有关如何使用它的信息,请参考LIMIT文档 。
为了解决此问题,您需要执行以下操作:
让我给出一个可以在SQL Server中工作并且在mysql中进行很小的修改的解决方案:
with allnums as (
select id, 1 as col, num1 as num from t union all
select id, 2 as col, num2 as num from t union all
select id, 3 as col, num3 as num from t union all
select id, 4 as col, num4 as num from t union all
...
)
select top x an1.num, an2.num, count(*)
from allnums an1 join
allnums an2
on an1.id = an2.id and
an1.col < an2.col
order by count(*) desc
我认为mysql不支持“ with”语法,因此您需要重复两次子查询,将结果放在临时表中,或创建一个视图。
您还可以使用特定于数据库的结构(例如SQL Server中的“ unpivot”)表达相同的想法。 这可以稍微简化SQL,但幅度不大。
如果每行没有唯一的ID,则在SQL Server中很容易做到的是使用row_number()函数在另一个“ with”语句中分配一个。 或者,您可以将所有数字转换为字符串,然后将它们连接在一起。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.