2012-07-17 74 views
0

我有以下兩個表:如何在MySQL SELECT結果集中包含自定義計數?

TABLE: area 
*City_ID *Number Name 
-------- ------- ---- 
SUR  1   Fleetwood 
SUR  2   Whalley 
SUR  3   Guildford 
SUR  4   Newton 
SUR  5   Cloverdale 
SUR  6   South Surrey 
ABB  1   Abbotsford East 
ABB  2   Abbotsford West 
ABB  3   Aberdeen 
ABB  4   Bradner 
ABB  5   Central Abbotsford 
ABB  6   Matsqui 
ABB  7   Poplar 
ABB  8   Sumas Mountain 
ABB  9   Sumas Prairie 

TABLE: city 
*ID  Name 
---  ---- 
SUR  Surrey 
ABB  Abbotsford 
LAN  Langley 

使用下面的語句:

SELECT DISTINCT area.City_ID, city.Name 
FROM area 
INNER JOIN city 
WHERE area.City_ID = city.ID 

我得到:

SELECT: 
City_ID city.Name 
------- --------- 
SUR  Surrey 
ABB  Abbotsford 

但是我怎麼選擇以下內容:

SELECT: 
City_ID city.Name area_COUNT 
------- --------- ---------- 
SUR  Surrey  6 
ABB  Abbotsford 9 

其中area_COUNTarea中每行對應的行數City_ID

回答

2

使用GROUP BY而不是DISTINCT

SELECT city.City_ID, city.Name, COUNT(*) 
FROM area 
INNER JOIN city 
WHERE area.City_ID = city.ID 
GROUP BY city.ID 
+0

如果我可以,我會已經接受了這一點。等待8分鐘。 – 2012-07-17 08:53:43

+0

請參閱回答評論[11519121](http://stackoverflow.com/questions/11518995/how-do-i-include-a-custom-count-in-a-mysql-select-result-set/11519121# 11519121)below – 2012-07-17 23:41:48

0

附加在其結尾

SELECT area.City_ID, city.Name, count(*) as area_COUNT 
FROM area 
INNER JOIN city 
WHERE area.City_ID = city.ID 
GROUP BY area.City_ID 
+0

謝謝shankhan,但我首先看到了@MvG的答案。再次感謝,雖然。 :D – 2012-07-17 08:54:26

1

你也應該在GROUP BY子句中添加名稱

SELECT area.City_ID, city.Name, count(*) as area_COUNT 
FROM area 
INNER JOIN city 
WHERE area.City_ID = city.ID 
GROUP BY area.City_ID,City.Name 
+0

對不起,但是爲什麼? – 2012-07-17 09:02:34

+0

@AnaBan他是對的。 SQL規範要求所有非聚合列在組中列出。 – Ariel 2012-07-17 09:13:38

+0

MySQL不允許列出它們。如果該列對所有分組行沒有相同的值,則會進行任意選擇。 – MvG 2012-07-17 09:21:53

0

使用GROUP BY代替組DISTINCT:

SELECT city.City_ID,city.Name,COUNT(*)FROM 面積 INNER JOIN城市 WHERE area.City_ID = city.ID GROUP BY city.ID

+0

仍然需要在group by子句中添加Name列 – Madhivanan 2012-07-18 08:13:28