DROP TABLE IF EXISTS T;
CREATE table t(user_id int, item_id int);
insert into t values
(1 , 100),
(1 , 200),
(3 , 100);
select user_id
from t
where item_id in (100, 200)
group by user_id having count(distinct item_id) = 2;
+---------+
| user_id |
+---------+
| 1 |
+---------+
1 row in set (0.00 sec)
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;
3条答案
按热度按时间ct2axkht1#
ljo96ir52#
您可以使用self-join(直观上更容易理解):
vfh0ocws3#
使用条件聚合:
这个技巧首先只限制与您感兴趣的两个项目对应的记录,然后它Assert匹配的用户具有两个不同的项目计数,这意味着他满足条件。
有时,逻辑需要以一种稍微不同的方式进行:
这种形式在某些情况下可能更有用,但它做同样的事情。