我试图获得执行最大值的医生的身份。医疗注意事项:
我正在使用的表格包含以下列:
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
哪个(丑陋)并再次给出错误。
我不知道如何得到它。
答案 0 :(得分:4)
可以使用TOP 1
和Order 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