从 table 开始计算行数

Counting rows from table

我有问题。看似容易解决,其实我也不知道为什么不行!

我有两个表:

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
________________________

有了这个,我只想计算每个主机组中的主机数。 这是我的 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
_____________________

谢谢大家的回答! :)

试试这个:

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

我想你可以使用 group by

的左连接
SELECT HG.name, COUNT(*) AS count
FROM HOSTS H 
LEFT JOIN  HOSTGROUPS HG ON ( H.hostgroup = HG.id)
GROUP BY HG.name;
SELECT HG.name, COUNT(H.id) AS count
FROM HOSTS H, HOSTGROUPS HG
WHERE H.hostgroup = HG.id(+)
group by H.id;

希望对您有所帮助