MySQL嵌套查询

时间:2012-05-30 21:49:50

标签: mysql select

我有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

我不确定我是否使用嵌套查询犯了一个简单的错误,或者我是以完全错误的方式解决这个问题,应该使用连接或其他一些构造,无论哪种方式我都被卡住了。任何帮助都会得到很好的接受。

1 个答案:

答案 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