我有这样一个表如下:谁满足两个不同的条件查找SQL用户
USER ID || Quality_A
200; 1
15; 3
35; 7
76; 6
200; 5
如果我想找到的所有用户,使得它们的存在排在那里用户质量是1,和他们的存在一行那里的用户质量是5,我该怎么做。例如,在上表中,用户200有两行,质量分别为1和5.因此他将被计数。
此外,帮助这应该被称为将不胜感激。
我有这样一个表如下:谁满足两个不同的条件查找SQL用户
USER ID || Quality_A
200; 1
15; 3
35; 7
76; 6
200; 5
如果我想找到的所有用户,使得它们的存在排在那里用户质量是1,和他们的存在一行那里的用户质量是5,我该怎么做。例如,在上表中,用户200有两行,质量分别为1和5.因此他将被计数。
此外,帮助这应该被称为将不胜感激。
你可以尝试这样的
select user_id
from table1
where quality_a in (1,5)
group by user_id
having count(distinct quality_a) >= 2
我建议以下查询:
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
);
的想法是,我们期待所有User_IDs质量等于1,则检查原始表(使用新的别名)为质量等于5的所有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;
其实,我觉得你的第二个选项是最干净的一个。 +1 – sstan