3

特定の ID ごとの値の合計を計算しようとしている問題があります。サブクエリを使用してこれを行うことにしました(通常は結合を使用しますが、クリッピングのために各サブクエリのカウンターも保持しています-詳細については、この質問を参照してください)。この質問のために、次のMySQLクエリがあると仮定します。

/* 1.  */  SELECT 
/* 2.  */      t1.experiement_id,
/* 3.  */      (SELECT  sum(x.size) 
/* 4.  */       FROM    (SELECT size, ( @rownum := @rownum + 1 ) AS `rownum`
/* 5.  */                FROM   data AS t0 
/* 6.  */                JOIN ( select @rownum := 0 ) 
/* 7.  */                WHERE  t0.experiment_id = t1.experiment_id
/* 8.  */                ORDER BY size) AS x
/* 9.  */                WHERE x.rownum <= t2.clip_index ) AS `sum`
/* 10. */  
/* 11. */  FROM data      AS t1
/* 12. */  JOIN data_clip AS t2 USING (experiment_id)
/* 13. */  
/* 14. */  GROUP BY t1.experiment_id

問題は7、一致するサブクエリ内の行を分離しようとしている行で発生します -不明な列でexperiement_idあるエラーが発生しています。t1.experiement_idこれは、1 レベル以上の深さでネストされたクエリでのみ発生します。ちょうどチェックとして、私はそれt2.clip_indexがうまく処理されていることに気づきました. 行 #7 をコメントアウトすると、クエリは正常に返されます (ただし、結果は間違っています)。私の条件で使用する親テーブルの列をサブクエリに認識させる方法はありますか? ありがとう。

4

1 に答える 1

1

ユーザー定義変数の代わりに行をカウントするために、このようなことを試しましたか?

(SELECT sum(size) FROM  data AS t0                  
WHERE  t0.experiment_id = t1.experiment_id
ORDER BY size HAVING COUNT(*)<=t2.clip_index
) AS `sum` 

これが機能するかどうか教えてください。ここで調査している興味深い問題です。

于 2011-09-04T09:42:22.647 に答える