从 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;
希望对您有所帮助
我有问题。看似容易解决,其实我也不知道为什么不行!
我有两个表:
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;
希望对您有所帮助