1

列を持つテーブルがあります: useridproductid

1 つのステートメントで次のことを実行したいと考えています。各メンバーについて、指定された別のメンバーの 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

これらは、指定したユーザー (1) の製品 ID と一致する各ユーザーの製品 ID であるため、結果は上記のようになります。

実際にはmatches desc、どこでのみ注文することもでき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 に答える