从同一个表中选择计数

时间:2013-01-24 22:23:33

标签: mysql

我有一个任务表,每个任务都有一个task_id列和parent_id列 我正在尝试构建一个返回每个task_id的查询,这个id在父id列中显示的次数。
我试过这个问题:

SELECT
     task_id, parent_id, 
     (SELECT COUNT( * ) 
      FROM  `tasks` 
      WHERE parent_id = task_id) AS count_parents 
FROM tasks

此查询无效。我希望这个问题足够清楚。

4 个答案:

答案 0 :(得分:5)

如果您想要包括所有任务,无论他们是否是父母,

select tasks.task_id,count(parent.parent_id)
from tasks
left join tasks parent on tasks.task_id=parent.parent_id
group by tasks.task_id;

如果您只想要父母的任务,那么这很简单:

select parent_id,count(*)
from tasks
group by parent_id;

(后者可能需要where parent_id is not null或类似,具体取决于您如何表示没有父母的任务。

答案 1 :(得分:1)

好像你想要这个:

SELECT task_id, 
  parent_id, 
  COUNT(parent_id) AS count_parents
FROM tasks
GROUP BY task_id, parent_id

答案 2 :(得分:1)

试试这个:

select task_id,parent_id, count(parent_id) as count_parents 
from `tasks` 
group by task_id,parent_id;

在这种情况下,你需要一个小组,希望它有所帮助。

答案 3 :(得分:0)

SELECT t2.task_id, t2.parent_id, 
     (SELECT COUNT( * ) FROM  `tasks` t1 
         WHERE t1.parent_id = t2.task_id) AS count_parents 
 FROM tasks t2

我想你的问题