2010-10-10 80 views
0

我有一個名爲「r」的表,裏面的表我存儲了id,ip和country。我正在運行此查詢:在MySQL DISTINCT + COUNT查詢上需要幫助

SELECT r.country, count(rr.ip), count(DISTINCT rr.ip) 
FROM `r` 
LEFT JOIN r rr 
ON r.country = rr.country 
GROUP BY r.country 

我確實得到列的行:「國家」;「數字」;「數字」; 但是「counts()」沒有顯示我希望顯示的內容(每個國家的原始/唯一Iips計數),我不知道爲什麼。例如,對於美國,我看到> 2000個獨特的ips,但在數據庫中只有500個條目。我的查詢出了什麼問題?

我想從數據庫中檢索的是包含列的行的列表:countries + count raw ips + count unique ips。 (計數與每個國家有關),我的意思是檢索不同國家的清單並對每個國家進行計數(無需執行多個查詢)。

回答

1
SELECT r.country, count(r.ip), count(DISTINCT r.ip) 
FROM `r` 
GROUP BY r.country 
0

喜歡的東西(沒有經過測試):

SELECT 
    r.country, 
    count(r.ip), 
    (SELECT COUNT(DISTINCT rr.ip) from r rr where rr.country = r.country) 
FROM 
    r r 
GROUP BY 
    r.country 
+0

我想要IP的總數和每個國家(從不全局)IPS的總UNIQUE數量。將立即檢查並嘗試您的查詢,謝謝。 更新:看起來你的查詢檢索我需要的數據,非常感謝。 – gtilx 2010-10-10 03:39:59

+0

是的,我在編寫查詢之前就明白了,但忘記刪除文本。我認爲RedFilter的答案更好,順便說一句,如果它有效。我不確定您是否可以在同一個查詢中使用不同的計數。 – 2010-10-10 03:42:16

0

爲什麼你需要在這裏自加入?在一個快速ñ骯髒的設置你有什麼在sqlite我只能做

SELECT country, count(ip), count(DISTINCT ip) FROM r GROUP BY country 

...我得到了預期的結果。