2014-02-24 65 views
0

我一直在嘗試了幾個小時圖了這一點,但它仍然無法正常工作..MySQL - 如何加入這些表以獲得正確的結果?

我有2個表:

  • 價格
  • 銷售

記錄如下:

價格

product_name price 
-------------------- 
Milk   0.80 
Cheese   1.00 
Bread   1.50 

銷售

customer_id product_name number_purchases 
------------------------------------------- 
15   Milk   2 
15   Cheese  1 
2   Butter  2 
2   Candy   4 
80   Bread   1 
... 
... 
15   Bread   2 
15   Milk   1 

的銷售每週跟蹤,客戶可以購買相同的商品出現在數據庫中多次(比如上例中的客戶15購買牛奶,每週兩次,所以顧客15買了3包牛奶。

我想爲某個客戶獲得: 他/她購買的每件產品,以及相應的該產品的總購買數量以及產品的相應價格。

這是我到目前爲止沒有錯誤:

SELECT product_name, SUM(number_purchases) 
FROM sales S 
WHERE customer_id = 80 
GROUP BY product_name; 

但是,當我想一些行添加到代碼,以獲得相應的價格也一樣,這是行不通的。我嘗試過的一件事:

SELECT product_name, SUM(number_purchases), price 
FROM sales S, prices P 
WHERE S.product_name = P.productname 
AND customer_id = 80 
GROUP BY product_name; 

這是不可能的只有一個查詢或我想念什麼?

非常感謝

+1

不工作沒有太大的繼續。可能在你的第二個查詢中,你需要指定表別名 - >'S.product_name',因爲它存在於兩個表中它含糊不清。 – Mihai

+0

plesase做一個小提琴的例子。 –

回答

0

使用別名

SELECT s.product_name, SUM(number_purchases), price 
FROM sales S, prices P 
WHERE S.product_name = P.productname 
AND customer_id = 80 
GROUP BY s.product_name; 

DBMS - 不知道這個產品名是否得到

P.S.我認爲你必須在組中增加價格

+0

感謝所有的評論。使用s.productname解決了問題的一部分,在GROUP BY中增加價格解決了問題的另一部分。它現在有效! – MarkM

3

你的最後一個查詢是由customer_id分組。嘗試改變這product_name

SELECT S.product_name, SUM(S.number_purchases), P.price 
FROM sales S, prices P 
WHERE S.product_name = P.product_name 
AND S.customer_id = 80 
GROUP BY S.product_name; 

,你也應該在from子句中從未使用逗號。相反,使用顯式聯接如在price你的第一個例子,骨料以及(或移動pricegroup by條款):

SELECT S.product_name, SUM(S.number_purchases), sum(P.price) total_price 
FROM sales S join 
    prices P 
    ON S.product_name = P.product_name 
WHERE S.customer_id = 80 
GROUP BY S.product_name; 
+0

感謝您快速回復。 我不知道爲什麼,但這是我的文章中的錯誤。我嘗試使用GROUP BY product_name而不是customer_id,但出現錯誤: columnname'product_name'位於FROM列表中的多個表中。 – MarkM

+0

@MarkM'S.product_name' – 7alhashmi

+0

@MarkM。 。 。你的OP在一個表中有'product_name',在另一個表中有'productname'。我認爲兩者都應該是'product_name'。 –

0

您的查詢應該是:

SELECT product_name, SUM(number_purchases), price 
FROM sales S, prices P 
WHERE S.product_name = P.productname 
AND customer_id = 80 
GROUP BY P.productname;