2016-04-22 12 views
2

Ich habe ein Problem. Es scheint einfach zu lösen, aber in der Tat weiß ich nicht, warum es nicht funktioniert!Zeilen zählen von Tabelle

Ich habe zwei Tabellen:

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

Mit diesen eingefügten Zeilen:

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 
________________________ 

Damit ich mag nur Anzahl von Hosts in jeder Hostgruppe zählen. Hier ist meine SQL-Abfrage:

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 

Und hier ist mein Ergebnis:

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

Und schließlich ist hier, was ich warte:

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

Vielen Dank für Ihre Antworten Jungs! :)

+2

hinzufügen GROUP BY-Klauseln zu den wählt verwenden können . (Und entfernen Sie das ';' ... Wird Ihre Abfrage wirklich ausgeführt?) – jarlh

+0

@jarlh Woops, das '' '' war nicht hier am Ursprung! – iArcadia

Antwort

2

Try this:

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

Es gibt mir genau das, was ich will. Danke für Ihre Hilfe ! :) – iArcadia

1

Ich glaube, Sie einen LEFT JOIN mit einer Gruppe von

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

Gibt mir 'NULL | Zähle 1 'anstelle von' Pyro | 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; 

this helps

+0

Scheint in MySQL nicht zu funktionieren. Was ist das '(+)'? – iArcadia