我有一个名为log的表
ID User_ID Machine_Number Email
1 100 12345 jim@gmail.com
2 100 12345 jim@gmail.com
3 101 67890 bill@gmail.com
4 102 12345 steve@gmail.com
我需要找到具有相同Machine_Number的用户的User_ID。在这种情况下,我需要返回100和102的查询。
我尝试过:
SELECT user_id, COUNT(machine_number)
FROM log
GROUP BY machine_number
HAVING COUNT(machine_number) > 1
但这给出了每次出现的machine_number的计数,即 用户ID计数(机器编号)
100 2
101 1
102 1
有什么建议吗?
答案 0 :(得分:1)
我想您想在同一台计算机上同时获得两个user_id。尝试minimize
:
group_concate
答案 1 :(得分:0)
我假设您的意思是不同用于同一台计算机。您可以像这样使用exists
来获取原始行:
select l.*
from log l
where exists (select 1
from log l2
where l2.machine_number = l.machine_number and l2.email <> l.email
);
这应该具有非常好的性能,尤其是在(machine_number, email)
上具有索引的情况下。
答案 2 :(得分:0)
使用存在
select distinct t1.* from log t1 where exists
( select 1 from log t2 where t1.machine_number=t2.machine_number
group by machine_number having count(*)>1
)
答案 3 :(得分:0)
SELECT user_id,Machine_Number
FROM log where Machine_Number IN
(SELECT Machine_Number FROM log GROUP BY Machine_Number HAVING count(1) > 1)
ORDER BY Machine_Number;
如果要使用不同的user_id,请在下面使用。
SELECT distinct user_id, Machine_Number
FROM log where Machine_Number IN
(SELECT Machine_Number FROM log GROUP BY Machine_Number HAVING count(1) > 1)
ORDER BY Machine_Number;
答案 4 :(得分:0)
下面的代码采用MS SQL语法,但我认为它将在MYSQL中正常工作。
sed 's/\(^[^_]*_[^_]*\)\(_[0-9]\{1,\}\)\([[:blank:]]\{1,\}.*\)/\1\3/' infile
答案 5 :(得分:0)
Select DISTINCT M.User_Id, M.Machine_NUmber from Machine M
Inner Join (Select M1.Machine_NUmber from Machine M1 Group By M1.Machine_NUmber Having COUNT(M1.Machine_NUmber)>1) M2
On M.Machine_NUmber = M2.Machine_NUmber