首页 > 解决方案 > sql子查询加入组

问题描述

我正在尝试从我们的数据库中获取我们的用户列表以及与他们来自同一队列的人数 - 在这种情况下,这被定义为同时来自同一所医学院。

medical_school_id存储在doctor_recordgraduation_dt中 也存储在doctor_record表中。

我已经设法使用一个子查询写出这个查询,该查询执行一个选择语句,计算每行的其他人的数量,但这需要永远。我的逻辑告诉我,我应该先运行一次简单的 GROUP BY 查询,然后以某种方式将 medical_school_id 加入其中。

group by查询如下

select count(ca.id) , cdr.medical_school_id, cdr.graduation_dt
from account ca
LEFT JOIN doctor cd on ca.id = cd.account_id
LEFT JOIN doctor_record cdr on cd.gmc_number = cdr.gmc_number
GROUP BY cdr.medical_school_id, cdr.graduation_dt

长选择查询是

select a.id, a.email , dr.medical_school_id,
                     (select count(ba.id) from account ba
                    LEFT JOIN doctor bd on ba.id = bd.account_id
                    LEFT JOIN doctor_record bdr on bd.gmc_number = bdr.gmc_number
                    WHERE bdr.medical_school_id = dr.medical_school_id AND bdr.graduation_dt = dr.graduation_dt) AS med_count,


from account a
LEFT JOIN doctor d on a.id = d.account_id
LEFT JOIN doctor_record dr on d.gmc_number = dr.gmc_number

如果你能把我推向正确的方向那就太棒了

标签: sqlpostgresql

解决方案


这样的事情怎么样?

select a.doctor_id
, count(*) - 1 
from doctor_record a
left join doctor_record b on a.medical_school_id = b.medical_school_id
                         and a.graduation_dt = b.graduation_dt
group by a.doctor_id
  1. 从计数中减去 1,这样您就不会将“同一队列中的其他人”中的医生计算在内

  2. 我将“同一队列”定义为“同一医学院和毕业日期”。

  3. 我不清楚 GMC 编号是什么以及它是如何相关的。跟队列有关系吗?


推荐阅读