2014-01-21 32 views
1

我的問題是這樣的:
我有一個表命名SQL在科醫生的最大數量

Doctor(id, name, department) 

和另一臺名爲

department(id, name). 

一個醫生與一個部門有關(只一個部門,而不是更多)

我必須做一個查詢返回部門與最大數量的醫生相關聯。

我不知道如何繼續,我覺得我需要使用嵌套查詢,但我剛開始,我真的很糟糕。 我想應該是這樣的,但我又真的不知道,我想不出要放什麼東西在嵌套查詢:

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

回答

3

SQL中的「與XYZs的最大數量查找ABC」問題的常見方法如下:

  • 查詢的基本知識的名單,其中包括XYZs
  • 的每個ABC的數
  • 根據XYZ的數量降序排列列表
  • 將結果限制爲單個項目;那將是你需要的最重要的項目。

在你的情況,你可以做這樣的(我假設MySQL的句法採取頂行):

SELECT * 
FROM department dp 
ORDER BY (SELECT COUNT(*) FROM doctor d WHERE d.department_id=dp.id) DESC 
LIMIT 1 
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

我一般避免使用MySQL的子查詢,由於衆所周知的bug在MySQL中。由於這個bug,MySQL爲每個外部查詢結果執行內部查詢。因此,如果您有10個部門,那麼醫生查詢將執行10次。這個錯誤可能已經在MySQL 5.6中修復了。在這種特殊情況下,部門的數量可能並不多,因此績效可能不是您最關心的問題。但是,以下解決方案應該適用於MySQL並且更加優化。 dasblinkenlight的答案几乎相同,只是在我之前:)。但MySQL不支持命令頂部。

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