2014-01-10 18 views
0

我有這個表Mysql的選擇總和(價格)上個月

stk 
+---------+--------------+ 
| Field | Type   | 
+---------+--------------+ 
| id  | int(11)  | 
| name | varchar(255) | 
| type_id | int(11)  | 
+---------+--------------+ 

stk_type 

+-------+--------------+ 
| Field | Type   | 
+-------+--------------+ 
| id | int(11)  | 
| name | varchar(255) | 
| price | int(11)  | 
+-------+--------------+ 

    customer 
+-------+--------------+ 
| Field | Type   | 
+-------+--------------+ 
| id | int(11)  | 
| fio | varchar(255) | 
+-------+--------------+ 
and sales 

+-------------+-----------+ 
| Field  | Type  | 
+-------------+-----------+ 
| id   | int(11) | 
| customer_id | int(11) | 
| stk_id  | int(11) | 
| date  | timestamp | 
+-------------+-----------+ 

,我需要選擇我多少錢拿到上個月; 我不知道如何在一個查詢中選擇它。

SELECT stk_id FROM sales 
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH) 

所以,現在我已經從上個月的所有STK的ID,而我需要計數總和,但我怎麼能做到這一點,如果我有重複鍵:例如:

如果最後一個查詢返回stk_id1,1,1,2,3,3 我怎麼能算的總和,如果價格在stk_type等於未來:

id 1 price 100 
id 2 price 200 
id 3 price 150 

所以在這個例子中,我應該得到這個結果800;

我需要選擇所有stk_id並以某種方式選擇價格並計算總和。 尋求幫助,謝謝。

回答

1

試試這個sql查詢

SELECT stk_id, SUM(price) FROM sales 
LEFT JOIN stk ON stk_id = stk.id 
LEFT JOIN stk_type ON type_id = stk_type.id 
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH) 
GROUP BY stk_id 
+0

它的工作,但我不;噸需要一個'GROUP BY'沒有它,工作perfeclty,謝謝 –

1
SELECT sales.stk_id, sum(stk_type.price) 
FROM sales LEFT JOIN stk_type ON (sales.stk_id=stk_type.id) 
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH) 
GROUP BY sales.stk_id; 

我假設「sales.stk_id = stk_type.id」是他們如何相關?

編輯:忘了where子句。

+0

是'sales.stk_id = stk_type.id' –