我正在尝试获取项目的平均值,因此我正在使用子查询。
更新:我最初应该更清楚,但我希望平均只适用于最后 5 个项目
首先我从
SELECT
y.id
FROM (
SELECT *
FROM (
SELECT *
FROM products
WHERE itemid=1
) x
ORDER BY id DESC
LIMIT 15
) y;
哪个运行但相当无用,因为它只是向我显示 ID。
然后我在下面添加
SELECT
y.id,
(SELECT AVG(deposit) FROM (SELECT deposit FROM products WHERE id < y.id ORDER BY id DESC LIMIT 5)z) AVGDEPOSIT
FROM (
SELECT *
FROM (
SELECT *
FROM products
WHERE itemid=1
) x
ORDER BY id DESC
LIMIT 15
) y;
当我这样做时,我在 'where 子句' 中得到错误 Unknown column 'y.id',在这里进一步阅读后我相信这是因为当查询下降到下一个级别时,它们需要加入?
所以我尝试了下面的**删除了不需要的 suquery
SELECT
y.id,
(SELECT AVG(deposit) FROM (
SELECT deposit
FROM products
INNER JOIN y as yy ON products.id = yy.id
WHERE id < yy.id
ORDER BY id DESC
LIMIT 5)z
) AVGDEPOSIT
FROM (
SELECT *
FROM products
WHERE itemid=1
ORDER BY id DESC
LIMIT 15
) y;
但我得到Table 'test.y' doesn't exist。我在正确的轨道上吗?我需要改变什么才能在这里得到我想要的东西?
该示例可以在 sqlfiddle 中找到。
CREATE TABLE products
(`id` int, `itemid` int, `deposit` int);
INSERT INTO products
(`id`, `itemid`, `deposit`)
VALUES
(1, 1, 50),
(2, 1, 75),
(3, 1, 90),
(4, 1, 80),
(5, 1, 100),
(6, 1, 75),
(7, 1, 75),
(8, 1, 90),
(9, 1, 90),
(10, 1, 100);
鉴于此示例中的数据,我的预期结果如下,其中每个 ID 旁边有一列具有前 5 次存款的平均值。
id | AVGDEPOSIT
10 | 86 (deposit value of (id9+id8+id7+id6+id5)/5) to get the AVG
9 | 84
8 | 84
7 | 84
6 | 79
5 | 73.75