Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cột không xác định trong truy vấn con mysql

Tôi không phải là chuyên gia về MySQL (trong MS SQL thì việc này có thể được thực hiện dễ dàng hơn) và câu hỏi của bạn có vẻ hơi không rõ ràng đối với tôi, nhưng có vẻ như bạn đang cố gắng lấy điểm trung bình của 5 mục trước đó.

Nếu bạn có Id không có khoảng trống , thật dễ dàng:

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

Nếu không , thì tôi đã cố gắng thực hiện truy vấn như thế này

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

Nhưng tôi có ngoại lệ Unknown column 'p.id' in 'where clause' . Có vẻ như MySQL không thể xử lý 2 cấp độ lồng các truy vấn con nhưng bạn có thể lấy 5 mục trước đó với offset , như thế này:

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 demo



  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 - CẬP NHẬT hàng dựa trên các hàng khác

  2. xóa tệp bằng thủ tục MySQL

  3. Làm cách nào để lấy số hàng được 'trả về' từ tập kết quả của một thủ tục được lưu trữ

  4. Kết nối với tùy chọn local-infile trong MySql Workbench

  5. Lỗi MySQL # 2014 - Các lệnh không đồng bộ; bạn không thể chạy lệnh này bây giờ