我有2张桌子,一张包含产品,一张是购买。我试图找出每种产品的最后3个购买价格的平均值。所以在下面的例子中,对于产品'beans',我想在产品时间1230854663之前返回最后3个购买价格的平均值,即客户C,D,E的平均值(239)
产品
+-------+------------+
| Name | time |
+-------+------------+
| beans | 1230854764 |
+-------+------------+
购买
+----------+------------+-------+
| Customer | time | price |
+----------+------------+-------+
| B | 1230854661 | 207 |
| C | 1230854662 | 444 |
| D | 1230854663 | 66 |
| E | 1230854764 | 88 |
| A | 1230854660 | 155 |
+----------+------------+-------+
我已经提出了一个嵌套的选择查询,它几乎让我在那里,即如果我硬编码的时候它可以工作:
SELECT products.name,(SELECT avg(temp.price) FROM (select purchases.price from purchases WHERE purchases.time < 1230854764 order by purchases.time desc limit 3) temp) as av_price
from products products
但是如果查询引用的是product.time而不是下面的硬编码时间,那么我会收到列products.time不存在的错误。
SELECT products.name,(SELECT avg(temp.price) FROM (select purchases.price from purchases WHERE purchases.time < products.time order by purchases.time desc limit 3) temp) as av_price from products products
我不确定我是否使用嵌套查询犯了一个简单的错误,或者我是以完全错误的方式解决这个问题,应该使用连接或其他一些构造,无论哪种方式我都被卡住了。任何帮助都会得到很好的接受。
答案 0 :(得分:0)
您的查询中唯一的问题是您没有在内部查询中提及产品表。
SELECT products.name,(SELECT avg(temp.price)
FROM (select purchases.price from purchases,products
WHERE purchases.time < products.time order by purchases.time desc limit 3) temp) as
av_price from products products