一尘不染

获取同一表中的公共行

sql

我进行了一些搜索,但没有找到与我要达到的目标完全相同的东西。

基本上,我试图找到两个用户的投票习惯之间的相似之处。

我有一张表格,其中存储了进行的每个个人投票,该表格存储:

voteID
itemID     (the item the vote is attached to)
userID     (the user who voted)
direction  (whether the user voted the post up, or down)

我的目的是通过找出两件事来计算用户A和B之间的相似度:

  1. 他们有共同的票数 。也就是说,他们俩都对同一条帖子进行了投票的次数(此时的方向并不重要)。
  2. 他们以共同的投票朝同一个方向投票的次数

(然后只需将#2计算为#1的百分比,即可获得粗略的相似度等级)。

我的问题是, 如何找到两个用户的投票集之间的交集?
(即我如何充分地计算第1点,而又不会以非常低效的方式遍历每张选票。)我想,如果它们在不同的表中,INNER
JOIN就足够了……但这显然行不通在同一张桌子上(或者会吗?)。

任何想法将不胜感激。


阅读 148

收藏
2021-05-30

共1个答案

一尘不染

像这样的东西:

SELECT COUNT(*)
FROM votes v1
INNER JOIN votes v2 ON (v1.item_id = v2.item_id)
WHERE v1.userID = 'userA'
AND v2.userUD = 'userB'
2021-05-30