Sql 在单独的字段中计算具有匹配值的记录数
我有一张桌子(myTable):Sql 在单独的字段中计算具有匹配值的记录数,sql,count,Sql,Count,我有一张桌子(myTable): id | name | orig_id ----+-------+-------- 01 | Bill | - 02 | Tom | 01 03 | Sam | 01 04 | Alex | 02 05 | Phil | - 06 | Bob | 01 id | name | orig_id | mycount ----+-------+---------+-------- 01 | Bill | - |
id | name | orig_id
----+-------+--------
01 | Bill | -
02 | Tom | 01
03 | Sam | 01
04 | Alex | 02
05 | Phil | -
06 | Bob | 01
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
我希望查询返回每个记录,但添加一列,其中包含原始id等于当前行id的其他行的计数。结果表如下所示:
id | name | orig_id
----+-------+--------
01 | Bill | -
02 | Tom | 01
03 | Sam | 01
04 | Alex | 02
05 | Phil | -
06 | Bob | 01
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;
如何实现所需的结果?您可以通过连接和聚合来实现这一点:
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;
使用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
请参见产生此结果的示例:
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
为什么当Tom有1,但两者都有origid 01时,Sam的计数是0?Sam不应该也有计数1Sam的计数为0,因为没有其他记录的原始id等于他的id(03)。Tom的计数为1,因为Alex的原始id等于Tom的id。如何更新此查询以显示mycount=0的记录?