Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同一表中不同列的自身id的SQL计数和_Sql_Postgresql - Fatal编程技术网

同一表中不同列的自身id的SQL计数和

同一表中不同列的自身id的SQL计数和,sql,postgresql,Sql,Postgresql,我有一个表,它自己引用(邀请)。这里有一个列invested\u by\u id,我想从中统计每个被邀请的患者档案的数量。我该怎么做?我应该使用另一个SELECT语句还是JOIN语句 我认为它将类似于count(选择*WHERE p.id=invested\u by\u id),但不确定放在哪里 SELECT p.first_name, FROM patient_profiles AS p 当表具有自引用时,您可以使用自联接进行查询: SELECT host.id , host.f

我有一个表,它自己引用(邀请)。这里有一个列
invested\u by\u id
,我想从中统计每个被邀请的患者档案的数量。我该怎么做?我应该使用另一个SELECT语句还是JOIN语句

我认为它将类似于count(选择*WHERE p.id=invested\u by\u id),但不确定放在哪里

SELECT p.first_name,
FROM patient_profiles AS p

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

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\u by\u id=host.id
条件链接到其主机。之后,使用
groupby
将结果展平,以生成配置文件列表以及计数


注意:上面不会显示不邀请任何人的个人资料。如果您想查看它们,请切换到
左侧外部联接

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

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

请回答您的问题,并根据这些数据添加一些内容和预期输出。请你的问题-不要在评论中发布代码或其他信息。我想使用左外连接,计数(*)会变成什么?@user2954587在编辑之前计数会是1。编辑之后,它将为零。