我有一个包含列的表:userid
,productid
我想在一个声明中执行以下操作: 对于每个成员,计算与另一个指定成员的产品匹配的产品数量。
示例表:
userid productid
1 10
1 14
2 10
3 12
3 14
3 10
3 19
4 15
在上面的例子中,如果我指定了userid 1,那么我想得到一个看起来像的结果:
userid matches
2 1
3 2
4 0
结果如上所示,因为这些是来自每个用户的产品,与我指定的用户(1)的产品相匹配。
实际上,我还希望按matches desc
订购,并且仅在matches>0
的位置订购。所以它会是:
userid matches
3 2
2 1
有什么想法吗?
答案 0 :(得分:1)
SELECT a.UserID, COUNT(*) `matches`
FROM TableName a
INNER JOIN
(
SELECT ProductID
FROM TableName
WHERE userID = 1
) b ON a.ProductID = b.ProductID
WHERE a.userID <> 1
GROUP BY a.UserID
HAVING COUNT(*) > 0
输出
╔════════╦═════════╗
║ USERID ║ MATCHES ║
╠════════╬═════════╣
║ 2 ║ 1 ║
║ 3 ║ 2 ║
╚════════╩═════════╝