サブクエリを使用しているため、アイテムの平均を取得しようとしています。
更新:最初はもっと明確にするべきでしたが、平均は最後の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;
これを行うと、エラーUnknown column 'y.id' in 'where clause'が表示されます。ここをさらに読むと、クエリが次のレベルに下がったときに結合する必要があるためだと思いますか?
だから私は以下を試しました**不要な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' does not 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