2017-06-15 123 views
1

我有一個ID和IP地址列表,我想顯示一個ID與多個IP地址相關聯的次數。SQL:計算唯一出現次數?

例如:

數據集:

ID  IP Address 
123 1.1.1.1 
123 2.2.2.2 
456 3.3.3.3 
456 4.4.4.4 
456 5.5.5.5 

預期輸出:

ID Count of Distinct IP addresses 
123 2 
456 3 

我怎樣才能做到這一點使用SQL?

在此先感謝!

+2

你可以使用'COUNT(DISTINCT IP)'。 –

回答

2

既然你將要「組團」的基礎上給定列的這些值,你可以把SQL的GROUP BY功能的優點是,可以讓你按照特定標準創建組,然後對這些單個組執行集合操作:

SELECT ID, 
     COUNT(DISTINCT IpAddress) 
    FROM YourTable 
GROUP BY ID 
    HAVING COUNT(DISTINCT IpAddress) > 1 

fo llowing部分是很重要的:

  • GROUP BY - 既然你所關心的基於ID的IP地址「組」,你需要將自己的個人組分成這些羣體。
  • COUNT(DISTINCT IpAddress) - 這在個人羣組環境中很重要,因爲您需要知道羣組中存在多少「唯一」IP地址(如果您不關心唯一結果,則可以刪除DISTINCT )。
  • HAVING - 既然你正在處理組/彙總信息,您將需要使用HAVING,表示要包括哪些羣體(即只包括具有多個不同的IP地址組)
+0

感謝您的意見。我收到一條錯誤消息: 查詢表達式'COUNT(DISTINCT [IP Address])'中的語法錯誤(缺少運算符)。 我做錯了什麼?以下是我的代碼: SELECT [唯一ID],COUNT(DISTINCT [IP地址]) FROM Report3 GROUP BY [唯一ID] HAVING COUNT(DISTINCT [IP Address]))> 0; 我感謝您的幫助 – user2946613

+0

'DISTINCT column_name'語法應該如上所示在COUNT()函數中按預期工作。你使用了哪些特定的SQL(即SQL Server,MySQL等)? –

+0

我正在使用訪問並單擊SQL按鈕以鍵入查詢。這有什麼區別嗎? – user2946613

1

你可以通過id來計算不同的ip地址。就像這樣:

SELECT ID,COUNT(DISTINCT IPAddress) AS nbr FROM table GROUP BY ID 

更新

SELECT ID,COUNT(DISTINCT IPAddress) AS nbr 
FROM table 
GROUP BY ID 
HAVING COUNT(DISTINCT IPAddress) > 1 
+0

如果您仔細閱讀OP的問題,您會發現您錯過了WHERE或HAVING。 –

+0

@RazvanDumitru:你說得對。我會更新一個有 – Arion

0

您可以使用GROUP BY是這樣的:

SELECT ID,COUNT(*) 
FROM table_name 
GROUP BY ID;