所以我有大量的SQL数据看起来基本上是这样的:
user | src | dst
1 | 1 | 1
1 | 1 | 1
1 | 1 | 2
1 | 1 | 2
2 | 1 | 1
2 | 1 | 3
我想过滤掉对一个用户唯一的(src,dst)对(即使该用户有重复项),只留下那些属于多个用户的对:< / p>
换句话说,对(1,2)对用户1是唯一的,对用户2是对(1,3),所以它们被丢弃,只留下对(1,1)的所有实例。 修改:为了澄清,我对过滤掉的对不感兴趣,我需要所有对不独特。 有什么想法吗?下面问题的答案可以找到非唯一对,但我的SQL-fu不足以处理要求它们属于多个用户的复杂性。user | src | dst
1 | 1 | 1
1 | 1 | 1
2 | 1 | 1
答案 0 :(得分:1)
使用EXISTS语法加入
SELECT t1.*
FROM table t1
WHERE EXISTS (SELECT 1
FROM table t2
WHERE t1.src = t2.src
AND t1.dst = t2.dst
AND t1.user != t2.user)
MIGHT工作的另一个选项(没有测试)。如果它有效,它将更有效:
SELECT user, src, dst
FROM table
GROUP BY src, dst
HAVING COUNT(DISTINCT user) > 1
答案 1 :(得分:1)
我的解决方案就是这样(经过测试):
SELECT user, src, dst, COUNT(user) as num_of_users
FROM test
GROUP BY src, dst
HAVING num_of_users = 1
修改强> 以下代码生成您在示例中提供的结果。
SELECT test.user, test.src, test.dst
FROM test
INNER JOIN
(
SELECT user, src, dst, COUNT(DISTINCT user) as num_of_users
FROM test
GROUP BY src, dst
HAVING num_of_users > 1
) as inner_sql
USING(src, dst)
这个解决方案是您正在寻找的解决方案吗?性能如何?
答案 2 :(得分:0)
可能与某些小组在一起吗?
类似
select user,src,dst,count(*) as c from table group by user,src,dst
having c = 1