我的问题是:
我有一个名为
Doctor(id, name, department)
和另一个名为
的表department(id, name).
医生与某个部门(只有一个部门,而不是更多部门)相关联
我必须做一个查询,让部门返回与其相关的最大医生数量。
我不知道如何继续,我觉得我需要使用嵌套查询,但我刚刚开始,我真的很擅长这个。 我认为它应该是这样的,但我再也不确定,我无法弄清楚嵌套查询中要放什么:
SELECT department.id
FROM (SELECT FROM WHERE) , department d, doctor doc
WHERE doc.id = d.id
答案 0 :(得分:3)
您可以使用Group BY
Select top (1) department.id,count(Doctor.*) as numberofDocs
from department inner join Doctor on Doctor.id = department.id
Group by department.id
Order by count(Doctor.*) desc
答案 1 :(得分:3)
SQL中“查找具有最大XYZ数量的ABC”问题的常用方法如下:
在你的情况下,你可以这样做(我假设MySQL语法占据最上一行):
SELECT *
FROM department dp
ORDER BY (SELECT COUNT(*) FROM doctor d WHERE d.department_id=dp.id) DESC
LIMIT 1
答案 2 :(得分:1)
由于MySQL中众所周知的bug,我通常会避免在MySQL中使用子查询。由于该错误,MySQL为每个外部查询结果执行内部查询。因此,如果你有10个科室,那么医生查询将被执行10次。该错误可能已在MySQL 5.6中修复。在这种特殊情况下,部门的数量可能不会很大,因此性能可能不是您主要关注的问题。但是,以下解决方案应该适用于MySQL并且更加优化。 dasblinkenlight的答案几乎是一样的,只是领先于我:)。但MySQL不支持命令top。
select dep.id, dep.name, count(doc.id) as dep_group_count from Doctor doc join department dep on doc.department = dep.id group by doc.department order by dep_group_count DESC LIMIT 1