仅在另一列具有不同值的情况下查找重复数据

时间:2019-08-15 14:55:04

标签: mysql

我有一张充满IP地址,成员ID和设备ID的表。我想查找多个成员使用相同IP地址的帐户。但是,由于该表还记录了设备ID,所以我不能只搜索重复的IP条目。

表示例

device_key      member_id       ip_address  
123452345       1               127.0.0.1       
2687924         1               127.0.0.1       
3983456         23              255.255.255.255  
4659824         876             255.255.255.255
54653787        90              1.1.1.1      

我已经尝试过了:

SELECT 
    member_id,
    ip_address, 
    COUNT(ip_address)
FROM
    table
GROUP BY ip_address
HAVING COUNT(ip_address) > 1

以上代码将同时输出127.0.0.1255.255.255.255。但是,我只对255.255.255.255感兴趣,因为这个IP被多个人使用。我无法找出正确的代码来仅输出此代码。

2 个答案:

答案 0 :(得分:2)

SELECT ip_address, COUNT(DISTINCT member_id)
FROM table
GROUP BY ip_address
HAVING COUNT(DISTINCT member_id) > 1;

如果要获取使用这些IP地址的实际成员ID,可以执行以下操作:

SELECT ip_address, member_id
FROM table
WHERE ip_address IN (SELECT ip_address
                     FROM table
                     GROUP BY ip_address
                     HAVING COUNT(DISTINCT member_id) > 1)
ORDER BY ip_address, member_id;

答案 1 :(得分:1)

您可以这样做:

select ip_address
from (
  select distinct ip_address, member_id from t
) x
group by ip_address
having count(*) > 1