2012-04-14 149 views
0

我在這裏需要一些幫助來查詢。我想從一個結果集重複ip的計數,並把它們與一個用戶名。在sql服務器查詢中計算不同ip的數量

的原始結果集

Name | IP 
-------------- 
Bert | 192.168.1.1 
Bert | 192.168.1.5 
Laura| 192.168.1.2 

,我想這一點:

Name | IpCount 
-------------- 
Bert | 2 
Laura| 1 

我的查詢到目前爲止是:

select ips.userName, COUNT(ips.userIP) as cnt 
from (select u.userName, u.userIP from 
users) as ips 
group by ips.userName, ips.userIP 

但是,讓我錯了數,可以來人幫幫我?

編輯:

我用的單詞重複,但它應該是:不同的。抱歉的人。

+0

您還沒有在你的例子中重複的IP地址,所以我有點困惑,你到底是什麼。 – Mat 2012-04-14 09:17:49

+0

我想爲每個用戶統計他們登錄的有多少個不同的IP。 – 2012-04-14 09:27:06

+0

在我看來,您的「原始」結果集具有誤導性。你應該爲用戶Bert(例如)添加一個新的行,並添加一個重複的IP:「Bert,192.168.1.1」,「Bert,192.168.1.1」和「Bert,192.168.1.5」。所以,很明顯你想爲每個名字都計算DISTINCT IP。 – 2012-04-14 09:47:19

回答

3

假設你的例子有一個錯字,你的意思是

Name | IP 
-------------- 
Bert | 192.168.1.1 
Bert | 192.168.1.1 
Laura| 192.168.1.2 

,你的表名爲用戶。該查詢應該做

select Name, COUNT(IP) as cnt 
from users 
group by Name 

更新

由@Andriy中號指出,這個查詢應該做

select Name, COUNT(distinct IP) 
from users 
group by Name 
+0

我想爲每個用戶統計他們登錄的有多少個不同的IP地址。 – 2012-04-14 09:27:58

+3

@Elger:然後更改爲COUNT(DISTINCT IP)。 – 2012-04-14 09:29:59

+0

更新了答案 – Iridio 2012-04-14 09:33:00

0
SELECT name, COUNT(*) as Totalcount 
FROM  users 
GROUP BY name; 
0

還是隻有用戶超過1個IP:

SELECT   name, COUNT(*) 
FROM     users 
GROUP BY name 
HAVING COUNT(*) > 1