2016-10-24 4 views
0

Я пытаюсь получить идентификатор врача, который выполнил макс. количество медицинских Внимания:Найти врача с макс. количество медицинских осмотров

В таблице я работаю имеет следующие столбцы:

Adm_ID //Id of the Attention 
Med_ID //Medical Procedure carried out 
Doc_ID //ID Doctor 

Это моя попытка:

Сначала я подсчитать количество внимания врач имеет:

SELECT Doc_ID, COUNT(*) AS Attentions 
FROM Adm_Med 
GROUP BY Doc_ID 

Тогда я найти максимум между ними

SELECT MAX(Attentions) 
FROM 
(
SELECT Doc_ID, COUNT(*) AS Attentions 
FROM Adm_Med 
GROUP BY Doc_ID 
) temp 

И теперь у меня проблемы. Было бы хорошо, если я могу получить doc_id и Внимания одновременно, но когда-то запрос, как

SELECT MAX(Attentions), Doc_ID 
FROM 
(
SELECT Doc_ID, COUNT(*) AS Attentions 
FROM Adm_Med 
GROUP BY Doc_ID 
) temp 

Я получаю сообщение об ошибке (колонка «temp.Doc_ID» недопустим в списке выбора, поскольку он не содержится либо в агрегатной функции, либо в предложении GROUP BY).

Так вместо этого я пытаюсь запросить сокровенную таблицу с колонками doc_id и Внимания снова и сопоставляя Внимания с Max (Внимания):

SELECT Doc_ID 
FROM 
(
SELECT Doc_ID, COUNT(*) AS Attentions 
FROM Adm_Med 
GROUP BY Doc_ID 
) t1, 
(
SELECT MAX(Attentions) AS Maxattentions, 
FROM 
(
SELECT Doc_ID, COUNT(*) AS Attentions 
FROM Adm_Med 
GROUP BY Doc_ID 
) temp 
)t2 
WHERE t1.Attentions=t2.Maxattentions 

Который (некрасиво) и снова выдает ошибку.

Я понятия не имею, как это получить.

ответ

4

Это можно упростить с помощью TOP 1 и Order By

SELECT TOP 1 Doc_ID, COUNT(*) AS Attentions 
FROM Adm_Med 
GROUP BY Doc_ID 
Order by Attentions desc 

В случае, если есть связать в Max Count, и вы хотите, чтобы все стяжные записи используйте TOP 1 with Ties

SELECT TOP 1 with Ties Doc_ID, COUNT(*) AS Attentions 
FROM Adm_Med 
GROUP BY Doc_ID 
Order by Attentions desc 
+0

Спасибо. Теперь я узнал что-то новое (: – Jazz

Смежные вопросы