3

我有一个表(myTable),如下所示:

id  | name  | orig_id
----+-------+--------
01  | Bill  | -
02  | Tom   | 01
03  | Sam   | 01
04  | Alex  | 02
05  | Phil  | -
06  | Bob   | 01

我想要一个返回每条记录的查询,但添加的列包含其他行的计数,这些行的 orig_id 等于当前行的 id。

结果表如下所示:

id  | name  | orig_id | mycount
----+-------+---------+--------
01  | Bill  | -       | 3
02  | Tom   | 01      | 1
03  | Sam   | 01      | 0
04  | Alex  | 02      | 0
05  | Phil  | -       | 0
06  | Bob   | 01      | 0

我尝试了以下查询,但没有得到任何结果:

SELECT *, COUNT(t.name) AS mycount
FROM "myTable" AS t
WHERE t.id=t.orig_id
GROUP BY t.id;

我怎样才能达到预期的效果?

4

2 回答 2

5

您可以通过连接和聚合来做到这一点:

SELECT t.*, tsum.mycount 
FROM myTable t join
     (select orig_id, count(name) as mycount
      from myTable
      group by orig_id
     ) tsum
     on t.id = tsum.orig_id;
于 2013-06-26T01:29:33.413 回答
0

一个简单left join的 with count 就可以了:

select t.id, t.name, t.orig_id, count(o.id) mycount 
from myTable t
left join myTable o on t.id = o.orig_id
group by t.id, t.name, t.orig_id

请参阅SQLFiddle上产生此结果的现场演示:

ID  NAME    ORIG_ID MYCOUNTÂ 
01  Bill    (null)  3
02  Tom     01      1
03  Sam     01      0
04  Alex    02      0
05  Phil    (null)  0
06  Bob     01      0
于 2013-06-26T01:56:54.550 回答