我想获取所有具有 item_id=100 和 item_id=200 的不同 user_id。在这种情况下正确的结果是 1。但是在这个简化的情况下,我的 SQL 查询会是什么样子呢? 表:
user_id item_id
1 100
1 200
3 100
最佳答案
使用条件聚合:
SELECT user_id
FROM yourTable
WHERE item_id IN (100, 200)
GROUP BY user_id
HAVING COUNT(DISTINCT item_id) = 2;
此技巧首先限制为仅与您感兴趣的两个项目相对应的记录,然后断言匹配用户的不同项目计数为两个,暗示他符合条件。
有时逻辑需要以稍微不同的方式进行:
SELECT user_id
FROM yourTable
GROUP BY user_id
HAVING
SUM(CASE WHEN item_id = 100 THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN item_id = 200 THEN 1 ELSE 0 END) > 0;
这种形式在某些情况下可能更有用,但它的作用是一样的。
关于MySQL 查询 : Getting distinct values for this query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49752044/