SQL4 択難易度 応用

部署内で給与の高い順に順位 r を付けたい。正しいのは?

SELECT name,RANK() OVER PARTITION BY dept ORDER BY salary DESC AS rFROM emp ORDER BY name;

正答

  1. SELECT name, RANK() OVER (ORDER BY salary DESC PARTITION BY dept) AS r FROM emp ORDER BY name;
  2. SELECT name, RANK() (PARTITION BY dept ORDER BY salary DESC) OVER AS r FROM emp ORDER BY name;
  3. SELECT name, RANK() AS r OVER (PARTITION BY dept ORDER BY salary DESC) FROM emp ORDER BY name;
  4. 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

window-functionover

この問題を含む SQL のテストを制限時間つきで解く

SQLクイズへ