mysql查询:获取此查询的不同值

ztmd8pv5  于 2021-06-24  发布在  Mysql
关注(0)|答案(3)|浏览(347)

我想获取所有不同的用户标识,其项标识为100,项标识为200。在这种情况下,正确的结果是1。但在这种简化的情况下,我的sql查询会是什么样子呢?表格:

user_id    item_id
1          100
1          200
3          100
ct2axkht

ct2axkht1#

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)
ljo96ir5

ljo96ir52#

您可以使用self-join(直观上更容易理解):

SELECT DISTINCT(t1.user_id) 
FROM table_name AS t1 inner join table_name AS t2 
ON t1.user_id=t2.user_id 
WHERE t1.item_id=100 and t2.item_id=200;
vfh0ocws

vfh0ocws3#

使用条件聚合:

SELECT user_id
FROM yourTable
WHERE item_id IN (100, 200)
GROUP BY user_id
HAVING COUNT(DISTINCT item_id) = 2;

这个技巧首先只限制与您感兴趣的两个项目对应的记录,然后它Assert匹配的用户具有两个不同的项目计数,这意味着他满足条件。
有时,逻辑需要以一种稍微不同的方式进行:

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;

这种形式在某些情况下可能更有用,但它做同样的事情。

相关问题