我有一个来自我们网站的登录日志列表,但我需要查看哪个用户ID登录的IP最多。我们的表格如下:
userid,ip,date(unix)
我需要输出哪些用户ID已登录到最多的IP。
我尝试了以下内容:
SELECT
userID
FROM loginLogs
GROUP BY userID
HAVING COUNT( DISTINCT ip ) > 1
但这只显示了一个用户ID列表。
答案 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;
答案 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