SQL选择*和同一个表的另一个查询结果的计数

时间:2016-12-29 16:01:13

标签: mysql sql select subquery

我需要帮助一件事;

表就像

ID, name, parent
1, ABC, -
2, DEF, 1
3, GHI, 1

我希望每一行都有子项目计数,我从一个选择查询中获取表格

select *, COUNT((SELECT ID FROM ... WHERE parent = this.ID)) from ...

这可能在SQL中吗?

结果应该像

1, ABC, 2
2, DEF, 0
3, GHI, 0

3 个答案:

答案 0 :(得分:1)

获取每个父级的计数,然后将其与原始表连接在id:

SELECT 
    t1.id, t1.name, IFNULL(c, 0) cnt
FROM
    your_table t1
        LEFT JOIN
    (SELECT 
        parent, COUNT(*) c
    FROM
        your_table
    GROUP BY parent) t2 ON t1.id = t2.parent;

答案 1 :(得分:0)

如果您只有一个孩子级别,那么试试这个

select *, (SELECT count(B.ID) FROM Yourtable B WHERE A.Id = B.Parent)
from Yourtable A

注意:如果您想要将大孩子纳入计数

,这将不起作用

答案 2 :(得分:0)

自己加入桌子。

SELECT t1.*, IFNULL(COUNT(t2.id), 0) AS childcount
FROM yourTable AS t1
LEFT JOIN yourTable AS t2 ON t2.parent = t1.id
GROUP BY t1.id

LEFT JOIN是处理没有子项的情况所必需的,因此您在结果中得到0INNER JOIN会省略这些行。)