2013-05-01 28 views
1

我試圖找出我從每個域都有用戶數量,雅虎,谷歌,AOL的....SQL要爲我的訂戶選擇唯一域計數?

這裏是我想出了但不分組,因爲我認爲這將

select SUBSTRING(EmailAddress, PATINDEX('%@%', EmailAddress) +1, LEN(EmailAddress) -PATINDEX('%@%', EmailAddress)) As [Domain], COUNT(SUBSTRING(EmailAddress, PATINDEX('%@%', EmailAddress) +1, LEN(EmailAddress) - PATINDEX('%@%', EmailAddress))) As [Count] 
from Subscribers 
GROUP BY EmailAddress 

結果是這樣的

yahoo.com 1 
gmail.com 1 
yahoo.com 1 

我想要的東西更多類似這樣的

yahoo.com 2 
gmail.com 1 

回答

1

問題是,您正在按emailaddress分組,這不是domain的值。如果電子郵件地址包含[email protected][email protected],因爲這些地址是唯一的,所以當您將組計數分隔時。

如果你想組由域值,那麼你需要GROUP BY你計算formala域:

select SUBSTRING(EmailAddress, PATINDEX('%@%', EmailAddress) +1, LEN(EmailAddress) -PATINDEX('%@%', EmailAddress)) As [Domain], 
    COUNT(SUBSTRING(EmailAddress, PATINDEX('%@%', EmailAddress) +1, LEN(EmailAddress) - PATINDEX('%@%', EmailAddress))) As [Count] 
from Subscribers 
GROUP BY SUBSTRING(EmailAddress, PATINDEX('%@%', EmailAddress) +1, LEN(EmailAddress) -PATINDEX('%@%', EmailAddress)); 

或者你可以通過domain別名使用子查詢,然後組:

select domain, 
    count(*) [count] 
from 
(
    select SUBSTRING(EmailAddress, PATINDEX('%@%', EmailAddress) +1, LEN(EmailAddress) -PATINDEX('%@%', EmailAddress)) As [Domain] 
    from Subscribers 
) d 
group by domain; 
+0

謝謝,我知道這是類似的東西。我試圖按域進行分組,所以至少我在正確的軌道上,我不知道我必須添加公式。我會在12分鐘內回答... – user1735894 2013-05-01 16:54:57