SQL部门中的最大医生数

时间:2014-01-21 18:31:20

标签: sql tsql

我的问题是:
我有一个名为

的表
Doctor(id, name, department)  

和另一个名为

的表
department(id, name).

医生与某个部门(只有一个部门,而不是更多部门)相关联

我必须做一个查询,让部门返回与其相关的最大医生数量。

我不知道如何继续,我觉得我需要使用嵌套查询,但我刚刚开始,我真的很擅长这个。 我认为它应该是这样的,但我再也不确定,我无法弄清楚嵌套查询中要放什么:

SELECT department.id  
FROM (SELECT FROM WHERE) , department d, doctor doc  
WHERE doc.id = d.id

3 个答案:

答案 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”问题的常用方法如下:

  • 查询包含每个ABC的XYZ计数的ABC列表
  • 根据XYZ的数量以降序排列列表
  • 将结果限制为单个项目;这将是你需要的顶级项目。

在你的情况下,你可以这样做(我假设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