2010-04-29 72 views
1

我有一个ip地址列的表。我想找到列出的前五个地址。具有限制的MySQL top count({column})

现在我打算出来了以下内容:

  1. 选择所有不同的IP地址
  2. 遍历所有这些说法count(id) where IP='{ip}'和存储计
  3. 名单前五名计数。

缺点包括如果我有500个IP地址。这是我必须运行的500个查询来弄清楚前五名的情况。

我想建立一个查询,像这样

select ip from table where 1 order by count({distinct ip}) asc limit 5 

回答

7
select ip, count(*) 
from table 
group by ip 
order by count(*) desc limit 5 
+0

优秀的,谢谢。虽然你可以更好地解释'group by'是如何工作的?删除它,我只获得相同的IP并重复计数五次。 – 2010-04-29 02:35:05

+3

@Josh:想象一下,你会得到一张牌,你被要求统计有多少红色和黑色牌。为了做到这一点,你将它们按颜色分组。你也可能被问到什么是最高或最低的红牌,再次,你会按颜色分组,然后确定最高和最低。这就是上面的查询所做的事情,但它是通过'ip address'分组而不是颜色。 – RedFilter 2010-04-29 02:55:36

+1

很好的解释,谢谢! – 2010-04-29 03:30:23

5
select IP, count(IP) as IPCount from TABLE 
group by IP 
order by IPCount DESC 
Limit 5 

有:)