2016-04-22 39 views
2

我遇到問題。這似乎很容易解決,但實際上我不知道它爲什麼不工作!從表中計數行

我有兩個表:

HOSTS(id, hostgroup_id) 
HOSTGROUPS(id, name) 

有了這些插入的行:

HOSTS 
________________________ 
id | hostgroup_id 
________________________ 
1  | 1 
2  | 1 
3  | 2 
4  | NULL   -- a host can have no hostgroup 
________________________ 


HOSTGROUPS 
________________________ 
id | name 
________________________ 
1  | ARM 
2  | Spark 
3  | Pyro 
________________________ 

就這樣,我只是希望計算每個hostgroups主機數目。 這裏是我的SQL查詢:

SELECT HG.name, COUNT(H.id) AS count 
FROM HOSTS H, HOSTGROUPS HG 
WHERE H.hostgroup = HG.id 
UNION DISTINCT 
SELECT HG.name, 0 AS count 
FROM HOSTS H, HOSTGROUPS HG 
WHERE (H.hostgroup = HG.id) = FALSE 

這裏是我的結果:

_____________________ 
name  |  count 
_____________________ 
ARM  |  2  -- OK 
Spark |  0  -- NOPE, INTENDED 1 
Pyro  |  0  -- OK 
ARM  |  0  -- NOPE, DUPLICATED ROW 
_____________________ 

最後,這裏就是我在等待:

_____________________ 
name  |  count 
_____________________ 
ARM  |  2 
Spark |  1 
Pyro  |  0 
_____________________ 

謝謝您的回答傢伙! :)

+2

BY子句添加組的選擇。 (並刪除';'...你的查詢真的執行了嗎?) – jarlh

+0

@jarlh Woops,';'不在原點! – iArcadia

回答

2

試試這個:

SELECT hg.name, 
(SELECT COUNT(*) 
FROM HOSTS h 
WHERE h.hostgroup_id = hg.id) 
FROM HOSTGROUPS hg 
+0

它給了我想要的東西。謝謝你的幫助 ! :) – iArcadia

1

我認爲你可以使用左由

SELECT HG.name, COUNT(*) AS count 
FROM HOSTS H 
LEFT JOIN HOSTGROUPS HG ON (H.hostgroup = HG.id) 
GROUP BY HG.name; 
+0

給我'NULL |計數1「而不是」Pyro |「計數0' – iArcadia

1
SELECT HG.name, COUNT(H.id) AS count 
FROM HOSTS H, HOSTGROUPS HG 
WHERE H.hostgroup = HG.id(+) 
group by H.id; 

希望與組加入這有助於

+0

似乎不能在MySQL中工作。什麼是(+)? – iArcadia