我有一个包含列的表: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
有什么想法吗?
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
- SQLFiddle演示
输出
╔════════╦═════════╗
║ USERID ║ MATCHES ║
╠════════╬═════════╣
║ 2 ║ 1 ║
║ 3 ║ 2 ║
╚════════╩═════════╝