2017-11-17 203 views
-1

產品銷往表MySql - 如何從兩個表中獲取平均數據?

舉行購買作爲一個訂單可以有很多產品每一個項目的記錄。

+----+------------+---------+----------+-------+ 
| ID | PAYMENT_ID | PROD_ID | STORE_ID | PRICE | 
+----+------------+---------+----------+-------+ 
| 1 |   1 |  5 |  4 | 3.00 | 
| 2 |   1 |  4 |  4 | 4.00 | 
| 3 |   2 |  3 |  7 | 5.00 | 
| 4 |   3 |  8 |  9 | 10.00 | 
+----+------------+---------+----------+-------+ 

支付表

保持訂單的付款記錄。

+----+-------+------------+----------+ 
| ID | TOTAL | DATE | STORE_ID | 
+----+-------+------------+----------+ 
| 1 | 7.00 | 10/10/2010 |  4 | 
| 2 | 5.00 | 01/07/2011 |  7 | 
| 3 | 10.00 | 20/02/2012 |  9 | 
+----+-------+------------+----------+ 

如何創建查詢或會給我很多銷售是如何在多年2010/2011/2012對於給定的商店取得每月(1至12月)平均的功能。

例如,如果「商店4」在2010年銷售的5種款產品在1月,在2011年和2012年則在一月份那家商店的平均銷售額是5

我想:

SELECT storeid, paymentdate 
FROM payment_table 
WHERE (YEAR(paymentdate)=2010 OR YEAR(paymentdate)=2011 OR YEAR(paymentdate)=2012) 
    AND (storeid=1) 

除了獲得給定商店的所有付款日期之外,這並沒有多大作用。

+0

你到目前爲止試過了什麼? –

+0

@ stephen.vakil'SELECT storeid,paymentdate FROM payment_table WHERE(YEAR(paymentdate)= 2010 or YEAR(paymentdate)= 2011 or YEAR(paymentdate)= 2012) AND(storeid = 1)'獲取給定商店的所有付款日期。 – HoldTight

+0

加入表格,然後使用'COUNT(*)'和'GROUP BY YEAR(日期),MONTH(日期)'來獲得每個月的計數。將它放到子查詢中,並使用'AVG(count)'和'GROUP BY month' – Barmar

回答

1

您需要加入表格才能獲得每個時間段的銷售量。把它放在子查詢中,這樣你可以按月重組它。

SELECT month, AVG(sales) AS avg_sales 
FROM (SELECT MONTH(paymentdate) AS month, YEAR(paymentdate) AS year, COUNT(*) AS sales 
     FROM payment_table AS pay 
     JOIN products_sold_table AS prod ON pay.id = prod.payment_id AND pay.store_id = prod.store_id 
     WHERE YEAR(paymentdate) IN (2010, 2011, 2012) AND pay.store_id = 1 
     GROUP BY month, year 
) AS x 
GROUP BY month 
+0

您能否請編輯答案,以便它返回給定商店的數據,我指定的商店有多個商店。我發現你有'COUNT(*)AS銷售';這怎麼可以用所售產品的總和而不是其價格的總和來代替。 – HoldTight

+0

這不是它的價格總和,它只是連接表中的行數。 – Barmar

+0

價格總和應爲'SUM(價格)' – Barmar

相關問題