MySql - 如何从两个表中获取平均数据?

时间:2017-11-17 21:35:20

标签: 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月)进行多少次销售。

例如,如果“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) 

除了获取给定商店的所有付款日期之外,这并没有多大作用。

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