MySQL关联patients与trials表,统计各试验的患者参与人数
解决SQL关联表统计患者人数的问题
原代码的问题
- 子查询里
SELECT patients是无效写法,得选trial_id才能和trials表做关联 - 子查询的
GROUP BY trials完全错误,要按patients.trial_id分组,这才是统计每个试验对应患者数的正确分组依据 - JOIN操作没指定关联条件,会产生错误的笛卡尔积结果
正确写法一:先分组统计再关联
SELECT trials.title AS Trial_Name, patient_counts.Num_Patients FROM trials JOIN ( SELECT trial_id, COUNT(id) AS Num_Patients FROM patients GROUP BY trial_id ) AS patient_counts ON trials.id = patient_counts.trial_id;
正确写法二:直接关联后分组(更简洁易读)
SELECT trials.title AS Trial_Name, COUNT(patients.id) AS Num_Patients FROM trials JOIN patients ON trials.id = patients.trial_id GROUP BY trials.id, trials.title;
简单说明
- 两种写法都能输出你想要的结果:试验名称对应患者人数的列表
- 第二种写法更适合新手理解:先通过外键
trials.id = patients.trial_id把两张表关联起来,再按试验的唯一标识(trials.id)和名称分组,统计每组的患者数量
内容的提问来源于stack exchange,提问作者John Conor
相关产品推荐
相关产品推荐

