2012-09-28 78 views
1

我有一個產品表和已購買產品的用戶表。在產品表A上有一個site_name,它決定了產品的購買地點。加入計數和加入組

表B顯示了用戶和他們購買的東西。

我正在使用以下內容顯示通過site_name將產品名稱分組在一起購買的產品列表。產品

SELECT product FROM A JOIN B ON A.prod_id = B.prod_id WHERE A.site_name = 'ebay' group by A.product 

表A是:爲用戶

prod_id 
site_name 
product 

表B是:

user_id 
prod_id 

什麼,我無法弄清楚是如何獲得的每買產品的數量線。

例如在表A中有

prod_id site_name product 
------- --------- ------- 
1   ebay   chair 
2   amazon  desk 
3   ebay   lamp 

和表B

user_id prod_id 
------- ------- 
1000   1 
1001   2 
1002   1 
1003   3 

所以,我想告訴每一行,其中SITE_NAME是eBay和多少產品被買了,爲了大多數第一,如:

chair 2 
lamp  1 

回答

1

一個小的改動,以邁克爾的查詢。

SELECT 
    products.product, 
    COUNT(users.prod_id) AS productsBought 
FROM 
    A AS products 
    INNER JOIN B AS users 
     ON products.prod_id = users.prod_id 
WHERE products.site_name = 'ebay' 
GROUP BY products.product 

上述查詢不會返回尚未購買的產品。

+0

非常感謝您的幫助!兩者都可以很好地工作,但是看起來好像速度更快。 –

+0

不是問題!! :) – Prakash

4

我會用一個LEFT JOIN,所以,如果有一個從未購買的產品,它會顯示爲0。

的計數

而且,我會用COUNT(users.prod_id),而不是COUNT(*),所以,它只會算其已經滿足了LEFT JOIN條件的行:

SELECT 
    products.product, 
    COUNT(users.prod_id) AS productsBought 
FROM 
    A AS products 
    LEFT JOIN B AS users 
     ON products.prod_id = users.prod_id 
WHERE products.site_name = 'ebay' 
GROUP BY products.product 
+0

非常感謝你,快速提問......永遠不會有一款從未被購買過的產品......想象一下滿足1000人並詢問你買了什麼,他們以清單開頭,總會有一個已經買了一個,或者該產品不會出現,但是因此可能有更多的用戶購買了相同的產品 - 這是否合理?這會改變什麼嗎? –

+0

假設每個用戶都購買了至少一個產品,那麼您可以將查詢更改爲使用內部連接而不是左側連接,因爲左側連接返回產品表中的所有行,即使尚未購買(與內部相比較慢加入)。 – Prakash

+0

你有一個例子@Prakash? –