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
    

    しかし、「where句」に例外Unknown column 'p.id' in 'where clause' 。 MySQLはサブクエリの2レベルのネストを処理できないようですが、offsetで5つの前のアイテムを取得できます 、このように:

    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フィドルデモ



    1. UnitilsとDBMaintainer-複数のユーザー/スキームでそれらを機能させる方法は?

    2. MariaDBでのNOW()のしくみ

    3. MySQLmy.cnfファイル-先行するグループのないオプションが見つかりました

    4. SQL Server 2008ManagementStudioがクエリの構文をチェックしていません