2010-05-14 77 views
9

點擊表:MySQL查詢獲得唯一值的計數?

hid | lid | IP 
1 | 1 | 123.123.123.123 
2 | 1 | 123.123.123.123 
3 | 2 | 123.123.123.123 
4 | 2 | 123.123.123.123 
5 | 2 | 123.123.123.124 
6 | 2 | 123.123.123.124 
7 | 3 | 123.123.123.124 
8 | 3 | 123.123.123.124 
9 | 3 | 123.123.123.124 

正如你所看到的,下面是各種蓋的獨特點擊:

lid 1: 1 unique hit 
lid 2: 2 unique hits 
lid 3: 1 unique hit 

因此,基本上,我需要一個查詢,將返回以下內容:

lid | uhits | 
1 | 1  | 
2 | 2  | 
3 | 1  | 

任何人都知道如何得到它?

回答

19
Select lid, count(distinct IP) as uhits 
from hits 
group by lid 
+1

我通過用4個空格縮進每行來重新格式化您的代碼。請參閱編輯屏幕右側的格式幫助(+1正確答案) – lexu 2010-05-14 06:54:53

+0

+1以獲得良好的答案(並且您也擊敗了我)。原諒我的編輯,但我冒昧刪除一個額外的(不平衡的)左括號。 – 2010-05-14 06:57:35

-2

您可以通過需要在使用組:

SELECT lid, count(*) 
    FROM Table 
    GROUP BY lid 
+2

這將返回命中總數,而不是唯一命中。 – 2010-05-14 06:50:57

6

,直到你開始進入真正複雜的查詢,SQL製成,所以它讀取很喜歡自然語句。因此,首先,如果您可以準確地描述您想要查詢的內容,那麼您已經有一半的人編寫了SQL。

在這種情況下,你能描述像你的問題:

獲得lid,並從我的表中的每個lid的獨特IP合計數。

唯一剩下的就是使用SQL關鍵字來翻譯這個。其中重要的是在這裏:

  • 得到 - >SELECT
  • 計數 - >COUNT
  • 獨特 - >DISTINCT
  • aggregate..for各<場> - >SELECT <aggregate function>..GROUP BY <field>

所以,你的句子以上開始看起來像:

SELECTlidDISTINCTIPFROM我的表GROUP BYlid的總COUNT

刪除不必要的話,清除它使用SQL語法離開最終查詢:

SELECT hits.lid, COUNT(DISTINCT hits.IP) AS uhits 
FROM hits 
GROUP BY hits.lid 
+0

+1:首先用正確的格式提交答案,且沒有任何錯誤。 – 2010-05-14 07:00:29

1
SELECT lid, COUNT(DISTINCT IP) 
FROM hits 
GROUP BY lid