我有一张表,其中配偶和子女与主要用户相关联。
+----------------+-------------------+----------+------------------------------+------------------+
| Id | User_ID | Rel_Type | Applno | RelationWith |
+----------------+-------------------+----------+------------------------------+------------------+
| 1234756 | aambu ghosha | self | 201708180921 | aambu ghosha |
| 1235146 | parvati ghosha | spouse | NULL | aambu ghosha |
| 1235147 | ananta ghosha | Children | 201708180921 | aambu ghosha |
| 500787 | anant01011975 | self | 20170811171403999L | anant01011975 |
| 501626 | chandu1988 | children | NULL | anant01011975 |
| 1706064 | atmaram sutar | self | 20170821094537517L | atmaram sutar |
| 1706494 | venu sutar | spouse | 20170821094537517L | atmaram sutar |
在上面的例子中,主申请人" aambu ghosha"是"自我" (主申请人)。配偶和子女(parvati和ananta)需要被视为单一申请人。
aambu ghosha 3
anant01011975 2
atmaram sutar 2
主要申请人的人数应包括其家庭成员。预期结果如上所示。 我想这可以通过自我加入实现,但我不确定有多少孩子与主申请人有关。找到计数的最佳方法是什么?
http://sqlfiddle.com/#!9/30945c/2/0
更新
如何自行加入和更新与主申请人关联的申请号?对于例如第二条记录的NULL值应更改为201708180921。
答案 0 :(得分:4)
假设您只有一个级别的孩子,这将起作用
SELECT userid, count(*)
FROM tab p
JOIN tab ch ON p.user_id = ch.RelationWith
WHERE p.user_id = p.RelationWith
GROUP BY userid
实际上,即使是更简单的查询也会产生您要求的结果
SELECT RelationWith, count(*)
FROM tab
GROUP BY RelationWith