1

我有一个带有列的表:useridproductid

我想在一个语句中执行以下操作:对于每个成员,计算与另一个指定成员的 productid 匹配的 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

结果看起来像上面这样,因为这些是每个用户的 productid 与我指定的用户 (1) 的 productid 匹配。

实际上,我还想通过matches desc且仅在 where订购它matches>0。所以它会是:

userid matches
3      2
2      1

有任何想法吗?

4

1 回答 1

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 ║
╚════════╩═════════╝
于 2013-04-09T15:23:59.053 回答