我有一个引用它的表(邀请)。有一列invited_by_id
,我希望得到每个患者所邀请的患者数量。我怎样才能做到这一点?我应该使用另一个SELECT语句还是连接?
我认为它会像count(SELECT * WHERE p.id = invite_by_id),但不确定放在哪里。
SELECT p.first_name,
FROM patient_profiles AS p
答案 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
我们的想法是在不同的别名(上面的host
和invitee
)下将表连接到自身。受邀者通过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