2010-11-10 82 views
2

我正在做我的家庭作業,無法找出「NOT IN」功能的正確語法。這個正確的連接問題的正確語法是什麼?

該數據庫是一個小型保險數據庫(運營商,成員,僱主,計劃)彌補這項任務。我應該「列出所有運營商和他們的計劃數量(使用右側或左側連接),列出carrier_id,carname和計劃數量。」

這是我寫截至目前:

SELECT carrier_id, carname, count(*) AS NoPlans 
FROM carriers RIGHT JOIN plans 
ON carriers.carrier_id = plans.carrierid; 

,當我嘗試運行它此拋出了「不是單組分組函數」的錯誤,但那是因爲我認爲這是找WHERE子句,我不知道條件應該是什麼。

載波表的結構:

Name       Null  Type 
------------------------------ -------- ----------- 
CARRIER_ID      NOT NULL CHAR(4) 
CARNAME         CHAR(35) 
CARADDRESS        CHAR(50) 
CARCITY         CHAR(30) 
CARSTCODE        CHAR(2) 
CARZIP         CHAR(10) 
CARPHONE        CHAR(10) 
CARWEBSITE        CHAR(255) 
CARCONTACTFIRSTNAME      CHAR(35) 
CARCONTACTLASTNAME      CHAR(35) 
CARCONTACTEMAIL       CHAR(255) 

11 rows selected 

計劃表結構:

Name       Null  Type 
------------------------------ -------- ------------- 
PLANID       NOT NULL NUMBER 
PLNDESCRIPTION       CHAR(35) 
PLNCOST         NUMBER(8,2) 
CARRIERID        CHAR(4) 

4 rows selected 
+0

@Bob: 「家庭作業標籤,像其他所謂的 '元' 標籤,現在氣餒,」(http://meta.stackoverflow.com/q/ 10812),但是,@Jeff,請(一如既往)遵循[通用指南](http://tinyurl.com/so-hints):陳述任何特殊的限制,展示你到目前爲止所嘗試的內容,並詢問具體的內容讓你感到困惑。 – 2010-11-10 20:44:18

回答

2
SELECT carrier_id, carname, count(*) AS NoPlans 
    FROM carriers RIGHT JOIN plans 
    ON carriers.carrier_id = plans.carrierid 
GROUP BY carrier_id, carname; 
+0

'noPlans'將成爲每個運營商的「carname」數量,而不是運營商的計劃數量。 – 2010-11-10 19:28:49

+0

@OMG:我懷疑這個問題措辭不好,這是預期的;你的答案可能有點高級?但@Scottie,即使在@Justin的編輯之後,你在錯誤的地方也有分號。 – 2010-11-10 19:40:59

+0

糟糕...我只是複製並粘貼了他的原始查詢並添加了組。我忘了修改分號。接得好。 – Scottie 2010-11-10 19:48:29

2

count需要group by條款。

你也應該考慮你的加入。它可能沒有達到你期望的水平。

0
SELECT c.carrier_id, c.carname, count(1) as no_plans 
FROM carriers c RIGHT JOIN plans p 
ON c.carrier_id = p.carrierid 
group by c.carrier_id , c.carname 
0
SELECT carrier_id, carname, count(plans.PLANID) AS NoPlans 
FROM carriers LEFT JOIN plans 
ON carriers.carrier_id = plans.carrierid 
GROUP BY carrier_id, carname