2012-04-18 82 views
1
SELECT id,icon,type,cnt 
FROM capability 
JOIN (
    SELECT s0_.capability_id AS capability_id0 , 
      count(capability_id) as cnt 
    FROM service_offer_capability s0_ 
    INNER JOIN service_offer s1_ ON s0_.service_offer_id = s1_.id 
    WHERE s0_.value <> 'i:0;' AND s1_.service_id = 2 
    GROUP BY s0_.capability_id 
) af 
ON af.capability_id0=id; 

我想要做的就是將max(cnt)作爲額外的列。我知道你可以通過cnt訂購併獲得第一個,但我正在尋找替代品。是否有可能或我必須運行多個查詢?Postgresql查詢COUNT和MAX在一起?

+0

你當然可以做到在一個select語句(儘管它會或多或少雙代碼和不使用視圖或東西幾乎可以肯定,不急不燥)我」米只是想知道爲什麼。 – JayC 2012-04-18 14:03:52

+0

@JayC你推薦什麼?關鍵是 – GorillaApe 2012-04-18 14:11:40

回答

3

這應做到:

SELECT id, 
     icon, 
     type, 
     cnt, 
     max(cnt) over() as max_cnt 
FROM capability 
JOIN (
    SELECT s0_.capability_id AS capability_id0 , 
      count(capability_id) as cnt 
    FROM service_offer_capability s0_ 
    INNER JOIN service_offer s1_ ON s0_.service_offer_id = s1_.id 
    WHERE s0_.value <> 'i:0;' AND s1_.service_id = 2 
    GROUP BY s0_.capability_id 
) af 
ON af.capability_id0=id; 
+0

以上! – GorillaApe 2012-04-18 14:20:28

+0

+1:該死,忘了over關鍵字。 – JayC 2012-04-18 14:41:12

+0

@JayC:你可能想要使用'LEFT JOIN',這樣你就不會失去子查詢中沒有匹配的能力。 – 2012-04-19 14:24:18