2014-01-28 65 views
1

我有一個表:SQL與組和行數

ID | domain  | address 
======================================= 
1 | example.com | example.com/siteA 
2 | example.com | example.com/siteB 
3 | example.com | sub.example.com 
4 | example.com | sub.example.com/dir 
5 | foobar.com | foobar.com/site123 
6 | foobar.com | foobar.com/site 
... 

現在我想知道有多少「地址」一個域有像

ID | domain  | count 
========================== 
1 | example.com | 4 
5 | foobar.com | 4 

我的發言是目前

SELECT * FROM table GROUP BY domain 

我知道這只不過是一張桌子還是應該分成兩份呢?

+0

你真的應該指定領域 - 更好的做法,這種方式。 – Paul

+0

對不起,你的意思是? – Xaver

+1

例如'SELECT id,域名,地址...'。 [閱讀此](http://satheeq.wordpress.com/2012/10/03/why-select-is-a-bad-practice-in-t-sql/)。 (PS:注意,每個人都通過在'SELECT'子句中指定字段名稱來回答)。 – Paul

回答

1
SELECT domain, COUNT(domain) as Count FROM table GROUP BY domain 

UPDATE:要獲得標識

SELECT MIN(ID) ID, domain, COUNT(domain) as Count FROM table GROUP BY domain 

OR,另一種方式:

SELECT 
(SELECT MIN (ID) FROM table WHERE DOMAIN = A.DOMAN) AS ID 
domain, 
COUNT(domain) as Count 
FROM table A GROUP BY domain 
+0

TBH我認爲ID有點多餘。 – Paul

+0

我不知道,只是爲了表明一個想法,但問題不是很明確 – simsim

+0

如果你的意思是MIN或MAX(ID),是的,那是真的。但只是爲了說明 – simsim

1

Read Group by

select min(ID) as ID,domain,count(1) as Count 
from table 
group by domain 
1

您正在尋找這樣的輸出:

ID | domain  | count 
========================== 
1 | example.com | 4 
5 | foobar.com | 4 

這是查詢(假定每個地址是每個域唯一的):

SELECT MAX(ID), domain, COUNT(*) as count FROM table GROUP BY domain 
+0

這不會工作,任何列都不在聚合函數中必須在一組一組 – simsim

+0

@simsim true,謝謝。 –