我有一张如下表格:
USER ID || Quality_A
200; 1
15; 3
35; 7
76; 6
200; 5
如果我想找到所有用户,使得他们存在一行,用户质量为1,并且他们存在一行,用户质量为5,我该怎么做。例如,在上表中,用户200有两行,质量分别为1和5.因此他将被计算在内。
此外,非常感谢帮助标题。
答案 0 :(得分:2)
您可以尝试这样
select user_id
from table1
where quality_a in (1,5)
group by user_id
having count(distinct quality_a) >= 2
答案 1 :(得分:1)
我推荐以下查询:
SELECT DISTINCT t1.User_ID
FROM table t1
WHERE t1.Quality_A = 1
AND EXISTS (SELECT 1
FROM table t5
WHERE t5.User_ID = t1.User_ID
AND t5.Quality_A = 5
);
我们的想法是,我们查找质量等于1的所有User_ID,然后检查原始表(使用新别名),查看质量等于5的所有User_ID,这些User_ID与我们已收集的ID之一相匹配。
您也可以使用自联接获得相同的结果,但此方法可能不太透明:
SELECT DISTINCT t1.User_ID
FROM table t1
JOIN table t5 ON (t1.User_ID = t5.User_ID)
WHERE t1.Quality_A = 1
AND t5.Quality_A = 5;