2010-04-29 30 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 

有:)