CREATE TABLE doctor( patient CHAR(13), docname CHAR(30) );
Run Code Online (Sandbox Code Playgroud)
假设我有这样一张桌子,那么我如何显示患者最多的医生的名字?就像最多的是三个,两个医生有三个病人,然后我会显示他们的两个名字.
这将获得最大的患者:
SELECT MAX(count)
FROM (SELECT COUNT(docname) FROM doctor GROUP BY docname) a;
Run Code Online (Sandbox Code Playgroud)
这是所有医生和他们有多少患者:
SELECT docname, COUNT(docname) FROM doctor GROUP BY name;
Run Code Online (Sandbox Code Playgroud)
现在我无法弄清楚如何将它们组合起来只列出拥有最大患者的医生的名字.
谢谢.
man*_*h_s 22
这应该做到这一点.
SELECT docname, COUNT(*) FROM doctor GROUP BY name HAVING COUNT(*) =
(SELECT MAX(c) FROM
(SELECT COUNT(patient) AS c
FROM doctor
GROUP BY docname))
Run Code Online (Sandbox Code Playgroud)
另一方面,如果您只需要第一个条目,那么
SELECT docname, COUNT(docname) FROM doctor
GROUP BY name
ORDER BY COUNT(docname) DESC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
这应该为你做:
SELECT docname
FROM doctor
GROUP BY docname
HAVING COUNT(patient)=
(SELECT MAX(patientcount) FROM
(SELECT docname,COUNT(patient) AS patientcount
FROM doctor
GROUP BY docname) t1)
Run Code Online (Sandbox Code Playgroud)
这是另一种只有一个子查询而不是两个子查询的替代方法:
SELECT docname
FROM author
GROUP BY name
HAVING COUNT(*) = (
SELECT COUNT(*) AS c
FROM author
GROUP BY name
ORDER BY c DESC
LIMIT 1
)
Run Code Online (Sandbox Code Playgroud)
获取两个查询并将它们连接在一起以获得最大值:
SELECT
docName,
m.MaxCount
FROM
author
INNER JOIN
(
SELECT
MAX(count) as MaxCount,
docName
FROM
(SELECT
COUNT(docname)
FROM
doctor
GROUP BY
docname
)
) m ON m.DocName = author.DocName
Run Code Online (Sandbox Code Playgroud)