簡體   English   中英

子查詢中的MySQL未知列

[英]MySQL unknown column in subquery

我正在嘗試通過MySQL中只有兩列idideas_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行的平均值

更新2

添加了一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM