2014-01-21 2 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

общий подход к «Найти ABC с максимальным числом XYZs» проблемы в SQL выглядит следующим образом:

  • запрос для получения списка азбуке, которая включает в себя подсчет каждого АВС XYZs
  • Заказать список в порядке убывания в зависимости от количества XYZs
  • Ограничить результат одним товаром; это будет верхний элемент, который вам нужен.

В вашем случае, вы можете сделать это следующим образом (я предполагаю, что синтаксис 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. Из-за ошибки 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 
Смежные вопросы