Mysql
 sql >> база данни >  >> RDS >> Mysql

Неизвестна колона в подзаявката на mysql

Не съм експерт по MySQL (в MS SQL може да се направи по-лесно) и въпросът ви изглежда малко неясен за мен, но изглежда, че се опитвате да получите средна стойност от предишните 5 елемента.

Ако имате ID без празнини , лесно е:

select
    p.id,
    (
        select avg(t.deposit)
        from products as t
        where t.itemid = 1 and t.id >= p.id - 5 and t.id < p.id
    ) as avgdeposit
from products as p
where p.itemid = 1
order by p.id desc
limit 15

Ако не , тогава се опитах да направя тази заявка по този начин

select
    p.id,
    (
        select avg(t.deposit)
        from (
            select tt.deposit
            from products as tt
            where tt.itemid = 1 and tt.id < p.id
            order by tt.id desc
            limit 5
        ) as t
    ) as avgdeposit
from products as p
where p.itemid = 1
order by p.id desc
limit 15

Но имам изключение Unknown column 'p.id' in 'where clause' . Изглежда, че MySQL не може да се справи с 2 нива на вмъкване на подзаявки. Но можете да получите 5 предишни елемента с offset , като това:

select
    p.id,
    (
        select avg(t.deposit)
        from products as t
        where t.itemid = 1 and t.id > coalesce(p.prev_id, -1) and t.id < p.id
    ) as avgdeposit
from 
(
    select
        p.id,
        (
            select tt.id
            from products as tt
            where tt.itemid = 1 and tt.id <= p.id
            order by tt.id desc
            limit 1 offset 6
        ) as prev_id
    from products as p
    where p.itemid = 1
    order by p.id desc
    limit 15
) as p

sql fiddle демонстрация



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ефективно подреждане на ключове в съставен индекс на MySQL (WRT Rails Polymorphic асоциации и STI)

  2. Предаване на стойности към операцията MySQL IN в подготвеното изявление за PDO?

  3. Django:sqlite за dev, mysql за prod?

  4. AES_DECRYPT() и AES_ENCRYPT() в MySQL с полски знаци

  5. Как да комбинирам два оператора UPDATE в една MySQL заявка?