2012-04-25 21 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