找到最大的医生。医疗注意事项

时间:2016-10-24 17:29:49

标签: sql-server

我试图获得执行最大值的医生的身份。医疗注意事项:

我正在使用的表格包含以下列:

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和Attentions,但是当查询类似

时,那将是很好的
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和Attentions查询最里面的表,并将Attentions与Max(Attentions)匹配:

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

哪个(丑陋)并再次给出错误。

我不知道如何得到它。

1 个答案:

答案 0 :(得分:4)

可以使用TOP 1Order By

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

如果最大计数中存在 tie 并且您想要所有领带记录,则使用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