給与の高い順で 3 位と 4 位の 2 名を出したい。正しいのは?
SELECT name FROM emp ORDER BY salary DESCOFFSET 2 LIMIT 2;正答
- SELECT name FROM emp ORDER BY salary DESC LIMIT 2 OFFSET 2;
- SELECT name FROM emp OFFSET 2 ORDER BY salary DESC LIMIT 2;
- SELECT name FROM emp LIMIT 2 OFFSET 2 ORDER BY salary DESC;
- SELECT name FROM emp ORDER BY salary DESC LIMIT 4 OFFSET 2;
解説
ページ送りは ORDER BY で順番を決めたうえで、LIMIT 取る件数 OFFSET 飛ばす件数 と書く。3 位と 4 位なら上位 2 名を飛ばして 2 名取るので LIMIT 2 OFFSET 2。SQLite では OFFSET を LIMIT より前に書くと構文エラーになり、LIMIT や OFFSET を ORDER BY より前に置くこともできない。LIMIT 4 OFFSET 2 は「4 位まで」の意味ではなく「2 行飛ばして 4 行」なので 3 名が返る。
参考: www.sqlite.org
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ