SQL:要查找多个表中产品的平均价格上涨情况?

时间:2019-01-13 23:34:59

标签: mysql sql dataset e-commerce business-intelligence

我对我的作业有一个SQL问题。我在MySQL5.7中有一个示例电子商务数据库,看起来像这样。不同样式的商品都具有相同的价格,一件商品可能具有多种样式。我被要求找到产品价格的平均每年涨幅。我对应该如何解决这个问题有一个大致的了解,但是在转换为SQL查询时遇到了麻烦。

SQL数据库:

SQL database

我的方法是内部联接除Items以外的每个表,然后按GROUP BYitemsstyle.item(使用变量和Years)的Year(placed on)顺序进行聚合。 / p>

所以我有两种方法来回答这个问题。一种是将所有购买的商品平均化(按课程年份总计),以找到该年所有商品的平均价格。由于数据价格的差异,并且这几年内有多少人购买了物品,这对IMO来说是一种不好的做法。无论如何,我已经尝试过了,

SELECT Sum(total) / Sum(quantity) AS Average,
       Year(placed_on)               AS year
FROM   orders AS a
       INNER JOIN order_items AS b
               ON a.id = b.order
GROUP  BY year  

另一种方法是查找似乎每年都购买的物品,然后平均增加百分比。这就是我现在遇到的问题。

1 个答案:

答案 0 :(得分:0)

这是.rc的用例。但是MySQL 5.7不支持解析窗口函数,也不支持通用表表达式(它们来自8.0)。

以下查询使用两个相同的子查询来计算每种产品的年平均价格,然后将它们进行比较。订购商品的数量和价格来自表格LAG,表格可以与order_items结合使用以获取订购日期。

计算规则:

    产品的
  • 年平均价格 定义为按数量加权的平均价格,如表orders中所记录。因此,如果在同一年内,对于同一产品,您以单价1出售10件商品,而以价格2出售另一数量5的商品,则平均价格为1.5

  • 平均增长量为:order_items

请参见this db fiddle

(avg_price_this_year - avg_price_last_year) / avg_price_last_year