code毎にグルーピングし、cost_salesが0を除外し、release_atの上位2件を取得するSQL文作成しています。
下記を参考に次のSQLを作りました。
【MySQL】グループ単位で上位n件を取得するSQL文を作成したい。
sql
1SELECT 2 id, code, release_at, cost_sales 3FROM 4 performance as p1 5-- 評価行と同じcodeで、評価行よりrelease_atが新しいものの行数を数えて、それが2以下なら採用する 6WHERE 7 2 >= ( 8 SELECT COUNT(*) 9 FROM (SELECT * FROM performance WHERE cost_sales != 0) as p2 -- ★1 10 -- FROM performance as p2 -- ★2 11 WHERE 12 p1.code = p2.code 13 AND p2.release_at >= p1.release_at 14 ) 15 AND cost_sales != 0 16ORDER BY 17 code, release_at DESC;
★1だと結果は6917件で、★2にすると25件になります。
★1のほうが条件文を挿入しているので件数が少なくなりそうなのですが、実際はその逆になっているところが理解できません。
また、もっとよいSQLがありますでしょうか。
どなたかご教授してくださると嬉しいです。よろしくおねがいします。
回答1件
あなたの回答
tips
プレビュー