MySQL从用户ID中选择最常用的IP

时间:2013-12-12 16:59:03

标签: mysql count

我有一个来自我们网站的登录日志列表,但我需要查看哪个用户ID登录的IP最多。我们的表格如下:

userid,ip,date(unix)

我需要输出哪些用户ID已登录到最多的IP。

我尝试了以下内容:

SELECT 
    userID 
FROM loginLogs 
GROUP BY userID 
HAVING COUNT( DISTINCT ip ) > 1

但这只显示了一个用户ID列表。

7 个答案:

答案 0 :(得分:3)

Select userID, count(distinct ip)
from loginLogs
Group by 1 
Order by 2 desc

答案 1 :(得分:1)

也许是这样的?

SELECT `userID`, count(`ip`) cnt FROM `loginLogs` GROUP BY `userID` HAVING cnt > 1

答案 2 :(得分:1)

您可以按不同的值排序,降序;

SELECT userID, COUNT(DISTINCT ip) `distinct IP#s` 
FROM loginLogs 
GROUP BY userID 
ORDER BY `distinct IP#s` DESC;

An SQLfiddle to test with

答案 3 :(得分:0)

您必须订购这些结果order by COUNT( DISTINCT ip ) desc并获取第一个Limit 0, 1

SELECT `userID`
FROM `loginLogs`
GROUP BY `userID`
ORDER BY COUNT( DISTINCT `ip` ) desc
LIMIT 0, 1

答案 4 :(得分:0)

SELECT userID, COUNT(*) AS count FROM loginLogs
GROUP BY userId ORDER BY count DESC 

这将为您提供从大多数登录到最少的所有用户。如果要限制结果,请使用LIMIT 1.

答案 5 :(得分:0)

您可以将子查询中包含的内容包装起来,以获取userID和不同IP的列表。

SELECT  DISTINCT ll.`userID`, ll.`ip`
FROM (  SELECT  `userID`, COUNT( 1 ) AS Cnt
        FROM    `loginLogs`
        GROUP BY `userID`
        HAVING  COUNT( DISTINCT `ip` ) > 1 ) id
LEFT JOIN `loginLogs` ll
    ON  id.`userID` = ll.`userID`
ORDER BY id.`Cnt`;

答案 6 :(得分:0)

如果您只想查看拥有最多ips的用户并且还想查看ips列表,可以使用GROUP_CONCAT()

SELECT `userID`, group_concat(DISTINCT `ip`) 
FROM `loginLogs` 
GROUP BY `userID` 
ORDER BY COUNT( DISTINCT `ip` ) DESC
LIMIT 1