2012-04-25 88 views
2

找到最大成员(患者)数量的保险公司。SQL嵌套式查询作业SQL小提琴

这就是数据库和我第一次尝试更贴近:

http://sqlfiddle.com/#!3/4b2ed/27

SELECT P.cid AS cid, COUNT (P.pid) AS CountP 
FROM  Patient P 
GROUP BY P.cid 

如何获得最大countp?

+0

只是FYI,你的问题说MySQL,但你的小提琴是MSSQL。 – 2012-04-25 11:14:55

+0

其在小提琴中的一个错误我运行它在mysql我确定... – 2012-04-25 11:17:32

回答

4

只是为了你的结果降序的病例数,并只取第一条记录。

SELECT P.cid AS cid, COUNT(P.pid) AS CountP 
FROM  Patient P 
GROUP BY P.cid 
ORDER BY CountP DESC 
LIMIT 1 

如果不止一家保险公司可能有成员是最大的号码,你想获取所有的人,你将需要使用子查询:

SELECT P.cid AS cid, COUNT(P.pid) AS CountP 
FROM  Patient P 
GROUP BY P.cid 
HAVING  CountP = (
    SELECT COUNT(pid) AS c 
    FROM  Patient 
    GROUP BY cid 
    ORDER BY c DESC 
    LIMIT 1 
); 

在你描述的怪现状在您的意见,其中一个是无法使用LIMIT,你可以这样做:

SELECT P.cid AS cid, COUNT(P.pid) AS CountP 
FROM  Patient P 
GROUP BY P.cid 
HAVING  CountP = (SELECT MAX(d.c) FROM (
    SELECT COUNT(pid) AS c 
    FROM  Patient 
    GROUP BY cid 
) AS d); 
+0

+1,这是答案 – virtualeyes 2012-04-25 11:18:17

+0

为什么它不在小提琴上工作? – 2012-04-25 11:23:40

+2

@OfekRon:正如Joachim上面提到的,你的sqlfiddle是为MSSQL配置的,而你的问题是标记的(而且我的答案是)MySQL。我创建了[相当于MySQL的小提琴](http://sqlfiddle.com/#!2/c4a9f/2),显示上述查询的工作。对于MSSQL,你需要使用'TOP(1)'来代替'LIMIT 1'(我相信它需要在'SELECT'关键字后立即放置)。 – eggyal 2012-04-25 11:29:13

0

尝试用以下:
最大(计数(P.pid))

+0

它不工作,在sqlfiddle上自己尝试 – 2012-04-25 11:15:24

+0

我相信@eggyal已经钉上它 – virtualeyes 2012-04-25 11:19:00

0
SELECT P.cid, COUNT (P.pid) AS CountP 
FROM Patient P 
GROUP BY P.cid 
compute max(count(p.pid)) 
+0

即时通讯不应该使用关键字计算(并且它不工作sqlfiddle btw) – 2012-04-25 11:16:47

+0

MAX(COUNT())'不能按预期工作。 – 2012-04-25 11:35:57

0

哇 - 很多限制。在这里你去:

SELECT MAX(CountP) FROM (
    SELECT P.cid, COUNT (P.pid) AS CountP 
    FROM Patient P 
    GROUP BY P.cid 
) winner