SQL计数自己的id在同一个表中但不同列的总和

时间:2017-10-18 13:24:57

标签: sql postgresql

我有一个引用它的表(邀请)。有一列invited_by_id,我希望得到每个患者所邀请的患者数量。我怎样才能做到这一点?我应该使用另一个SELECT语句还是连接?

我认为它会像count(SELECT * WHERE p.id = invite_by_id),但不确定放在哪里。

SELECT p.first_name,
FROM patient_profiles AS p

2 个答案:

答案 0 :(得分:1)

当表具有自引用时,您可以使用自联接查询它:

SELECT
    host.id
,   host.first_name
,   host.last_name
,   count(invitee.invited_by_id) as invited_count
FROM patient_profiles AS host
JOIN patient_profiles AS invitee ON invitee.invited_by_id = host.id
GROUP BY host.id, host.first_name, host.last_name

我们的想法是在不同的别名(上面的hostinvitee)下将表连接到自身。受邀者通过invitee.invited_by_id = host.id条件与其主机相关联。之后,使用GROUP BY展平结果,以生成配置文件列表以及计数。

注意:上述内容不会显示不邀请任何人的个人资料。如果您想看到它们,请切换到LEFT OUTER JOIN

答案 1 :(得分:0)

是的,您可以使用JOIN来执行此操作

SELECT
    p.id,
    p.first_name,
    COUNT(p2.id) AS "Invitations"
FROM patient_profiles p
    LEFT JOIN patient_profiles p2 ON p2.invited_by_id = p.id
GROUP BY
    p.id,
    p.first_Name