[英]MySQL unknown column in subquery
我正在嘗試通過MySQL中只有兩列id
和ideas_count
(int)的表格contests
實現“滾動平均值”:
對於contests
每一行,請返回id
以及當前(包括當前)之前最后10行的ideas_count
平均值。
這就是我被困的地方:
select
id, (
select avg(ideas_count) from (
select * from contests c2 where c2.id<=c1.id order by id desc limit 10
) prev
)
from
contests c1
order by
id asc;
MySQL返回錯誤:“ Unknown column 'c1.id' in 'where clause'
“
這是為什么?
我該如何進行這項工作?
select
id, (
select avg(ideas_count) from contests c2
where c2.id <= c1.id order by id desc limit 10
)
from
contests c1
order by
id asc;
將無法正常工作,因為它計算avg
第一和適用的limit
后 ,而我需要的最后10行的平均值 。
添加了一個SQLFiddle 。
使用在子查詢中生成的幾個序列號。 然后根據這些序列號加入子查詢。
SELECT sub1.id,
AVG(sub2.ideas_count) AS rolling_average
FROM
(
SELECT id, ideas_count, @seq1:=@seq1 + 1 AS seq
FROM contests
CROSS JOIN (SELECT @seq1:=0) sub0
ORDER BY id
) sub1
INNER JOIN
(
SELECT id, ideas_count, @seq2:=@seq2 + 1 AS seq
FROM contests
CROSS JOIN (SELECT @seq2:=0) sub0
ORDER BY id
) sub2
ON sub2.seq BETWEEN sub1.seq -9 AND sub1.seq
GROUP BY sub1.id
希望能有所幫助
select id , avg(ideas_count)
from (
select t1.id, t1.t_id, t1.ideas_count, @i:=if(@j < t1.id, 1, @i+1) as i, @j:=t1.id as j
from ( select c1.id, c2.id as t_id, c2.ideas_count
from contests c2 join contests c1 on c2.id<=c1.id
order by c1.id asc, c2.id desc
) as t1
join (select @i:=0, @j:=0) as t2
) as t3
where i <=10
group by id
您可以將查詢更新為:
select
id, (select avg(ideas_count) from
(select * from contests c2) prev where prev.id<=c1.id order by prev.id desc limit 10 )
as average
from
contests c1
order by id asc;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.