如何解决如何在SQL Server的一张表中的数据集中找到相似性?
假设我有一个包含以下数据的表:
id selection
--- ---------
1 x
1 y
1 z
1 k
2 a
2 b
2 c
2 i
3 x
3 a
3 v
3 m
4 x
4 y
4 d
4 z
如何编写查询以查找哪些“集合”相同或相似?例如,id
1和id
4都具有selection
值“ x”和“ y”。我在考虑某种枢轴函数,但是它必须是动态的,因为selection
值不是很小的一组值,而是很大的一组(数百甚至数千种可能性),并且我不能全部列出来。
“相似”:具有多个公共selection
值匹配
“最相似”:具有最常见的selection
值匹配
例如id
1和id
4最“相似”,因为它们具有三个匹配的selection
值。
我想找到最相似的集合。伪数据受空间限制而受到限制,但是可以想象每个集合可以具有n个selection
值,因此,某些集合可能具有两个匹配的selection
值(低相似性),而其他集合可能具有具有5或10个匹配的selection
值(5 =更高相似度; 10 =高相似度)。
解决方法
很难知道您想要什么,但是这里将是一个脚本开始。如果必须匹配一定数量的条目,请更改where子句中的值。如果一场比赛就够了,将其完全删除。
SELECT x.*
FROM (
SELECT
a.ID AS first_id,b.id AS second_id,a.selection,COUNT(*) OVER (PARTITION BY a.id,b.id) AS cnt
FROM your_table a
INNER JOIN your_table b
ON a.selection = b.selection
AND a.ID < b.ID
) AS X
WHERE x.cnt >= 2
ORDER BY X.first_id,x.second_id
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。