2016-09-17 47 views
0

enter image description here一個簡單的組由

的問題是,列出SUPPLIER_ID,供應商名稱和每個供應商提供的產品數量。僅列出已提供2種以上產品的產品。 [使用產品和供應商表]

SELECT S.SUPPLIER_ID, S.NAME, COUNT(S.PRODUCT_ID) 
FROM PRODUCT P, SUPPLIER S 
WHERE P.SUPPLIER_ID = S.SUPPLIER_ID 
GROUP BY NAME; 

SELECT SUPPLIER_ID, COUNT(PRODUCT_ID) 
FROM SUPPLIER, PRODUCT 
WHERE SUPPLIER.SUPPLIER_ID = PRODUCT.SUPPLIER_ID 
GROUP BY NAME; 

我試過兩種方法,但它們不起作用。什麼是問題?

回答

2

首先,學會使用正確的,明確的JOIN語法。簡單的規則:從不FROM條款中使用逗號; 總是使用明確的JOIN語法與ON子句中的加入條件。

如果您正在學習SQL,這一點尤其重要。

其次,您的問題是您在SELECT中有未列在GROUP BY中的未組合列。所以,我想這是你想要的查詢:

SELECT S.SUPPLIER_ID, S.NAME, COUNT(S.PRODUCT_ID) 
FROM PRODUCT P JOIN 
    SUPPLIER S 
    ON P.SUPPLIER_ID = S.SUPPLIER_ID 
GROUP BY S.SUPPLIER_ID, S.NAME 
HAVING COUNT(S.PRODUCT_ID) > 1; 

您需要HAVING條款,以確保有每個供應商至少有兩個產品。

+0

謝謝你的回答。 –

+0

另外,我將在下次使用總是加入語法。謝謝。 –

1


您可以使用此查詢

SELECT S.SUPPLIER_ID, S.NAME, COUNT(S.PRODUCT_ID) 
FROM PRODUCT P, SUPPLIER S 
WHERE P.SUPPLIER_ID = S.SUPPLIER_ID 
GROUP BY S.SUPPLIER_ID, S.NAME; 

基本上,如果你是聚合列,你應該提供一組在選擇查詢的所有列的條款

+0

與WHERE子句相比,使用JOINS提供了良好的持久性。因此,一邊條件 –

+0

一邊繼續練習使用JOINS謝謝您的團體的解釋。 –

1

試試這個:

SELECT S.SUPPLIER_ID, S.NAME, COUNT(S.PRODUCT_ID) COUNTER 
FROM PRODUCT P, SUPPLIER S 
WHERE P.SUPPLIER_ID = S.SUPPLIER_ID 
GROUP BY S.SUPPLIER_ID,S.NAME 
HAVING COUNT(*)>1; 
+0

儘管謝謝你的回答..! –

0
SELECT S.SUPPLIER_ID, S.NAME, COUNT(P.PRODUCT_ID) 
FROM PRODUCT P JOIN 
    SUPPLIER S 
    ON P.SUPPLIER_ID = S.SUPPLIER_ID 
GROUP BY S.SUPPLIER_ID, S.NAME 
HAVING COUNT(*)>1; 
; 
+2

歡迎來到Stack Overflow!你可以通過編輯它來解釋它是如何工作的,從而使這個答案更好。 – dorukayhan