产品已售表
保存所购买的每件商品的记录,因为订单可以包含许多商品。
+----+------------+---------+----------+-------+
| 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月)进行多少次销售。
例如,如果“Store 4”在2010年1月,2011年和2012年销售了5种产品,那么该商店在1月份的平均销售额将为5。
我试过了:
SELECT storeid, paymentdate
FROM payment_table
WHERE (YEAR(paymentdate)=2010 OR YEAR(paymentdate)=2011 OR YEAR(paymentdate)=2012)
AND (storeid=1)
除了获取给定商店的所有付款日期之外,这并没有多大作用。
答案 0 :(得分: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