2016-04-22 8 views
2

問題があります。それは解決しやすいようですが、実際にはなぜそれが動作していないのかわかりません!私は、各ホストグループ内のホストの数をカウントしたい、それとテーブルの行数をカウントする

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 
________________________ 

:これらの挿入行の

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

は、私は2つのテーブルを持っています。 は、ここに私の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

が選択にGROUP BY句を追加できます。 (そして、 ';'を削除してください...あなたのクエリは本当に実行されますか?) – jarlh

+0

@jarlh Woo、 '; – 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 |ピロ| count 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

関連する問題