部署内で給与の高い順に順位 r を付けたい。正しいのは?
SELECT name,RANK() OVER PARTITION BY dept ORDER BY salary DESC AS rFROM emp ORDER BY name;正答
- SELECT name, RANK() OVER (ORDER BY salary DESC PARTITION BY dept) AS r FROM emp ORDER BY name;
- SELECT name, RANK() (PARTITION BY dept ORDER BY salary DESC) OVER AS r FROM emp ORDER BY name;
- SELECT name, RANK() AS r OVER (PARTITION BY dept ORDER BY salary DESC) FROM emp ORDER BY name;
- SELECT name, RANK() OVER (PARTITION BY dept ORDER BY salary DESC) AS r FROM emp ORDER BY name;
解説
ウィンドウ関数は「関数() OVER (ウィンドウ定義)」で 1 つの式になり、別名 AS r はその式全体の後ろに付ける。括弧の中は PARTITION BY が先、ORDER BY が後の順に書き、逆にすると構文エラーになる。OVER と括弧の間に AS r を挟むと式が途中で切れて失敗する。OVER の括弧を省くと、OVER の後ろに書けるのはウィンドウ名だけなのでやはりエラー。外側の ORDER BY name は結果の並びを決める別の句である。
参考: www.sqlite.org
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ