Mysql 列出具有相同IP的用户

Mysql 列出具有相同IP的用户,mysql,sql,Mysql,Sql,我有这个疑问, SELECT * FROM users WHERE user_ip IN (SELECT user_ip FROM users GROUP BY user_ip having count(*) > 1) ORDER BY user_ip 这可以列出与其他用户至少有1个重复IP的所有用户 我需要按重复IP的总数订购所有用户 这个用户表 id, username, ip 1, user1, 1.1.1.1 2, user2, 2.2.2.2 3, user3, 1.1.1.1

我有这个疑问,

SELECT * FROM users
WHERE user_ip IN (SELECT user_ip FROM users GROUP BY user_ip having count(*) > 1)
ORDER BY user_ip
这可以列出与其他用户至少有1个重复IP的所有用户

我需要按重复IP的总数订购所有用户

这个用户表

id, username, ip
1, user1, 1.1.1.1
2, user2, 2.2.2.2
3, user3, 1.1.1.1
4, user4, 4.4.4.4
5, user5, 2.2.2.2
6, user6, 2.2.2.2
应该打印

ip, username, total
2.2.2.2, user2, 3
2.2.2.2, user5, 3
2.2.2.2, user6, 3
1.1.1.1, user1, 2
1.1.1.1, user3, 2
4.4.4.4, user4, 1

下面是一种使用
内部联接的方法:

SELECT u1.ip, u1.username, u2.total
FROM users u1
INNER JOIN
(
    SELECT ip, COUNT(*) AS total
    FROM users
    GROUP BY ip
) u2
ON u1.ip = u2.ip
ORDER BY u2.total DESC
单击下面的链接查看正在运行的演示:

您可以尝试:

SELECT `t`.ip, `t`.username, COUNT(`t2`.`id`) total
FROM `test` `t`
LEFT JOIN `test` `t2` ON `t2`.`ip`=`t`.`ip`
GROUP BY `t`.`id`
ORDER BY COUNT(`t2`.`id`) DESC

哦,太好了。从未想过在“同一”表上进行连接这被称为“自连接”,原因很明显。您可以将其添加到SQL工具箱中,并在需要时使用它。
SELECT `t`.ip, `t`.username, COUNT(`t2`.`id`) total
FROM `test` `t`
LEFT JOIN `test` `t2` ON `t2`.`ip`=`t`.`ip`
GROUP BY `t`.`id`
ORDER BY COUNT(`t2`.`id`) DESC