やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

SQLite3窓関数 窓関数はover句を省略するとエラーになる(Error: misuse of window function *)

 「over,filter句を省略すると通常の集計関数として機能する」らしい。が、探してみたら全滅だった。騙された。

データ

create table student_grades(
  class text, 
  name text,
  point integer
);
insert into student_grades values 
  ('A', 'Adati',    53),
  ('A', 'Itou',     21),
  ('A', 'Uehara',   93),
  ('B', 'Kato',     82),
  ('B', 'Kida',     98),
  ('B', 'Kurihara', 66),
  ('B', 'Kei',      75),
  ('B', 'Koi',      75);

 11ある窓関数をover句を使わずに実行してみる。

row_number()

select row_number() from student_grades;
Error: misuse of window function row_number()

rank()

select rank() from student_grades;
Error: misuse of window function rank()

dense_rank()

select dense_rank() from student_grades;
Error: misuse of window function dense_rank()

percent_rank()

select percent_rank() from student_grades;
Error: misuse of window function dense_rank()

cume_dist()

select cume_dist() from student_grades;
Error: misuse of window function cume_dist()

ntile(N)

 結果セットを複数のバケットに分けて、その番号を振る。

select ntile(3) from student_grades;
Error: misuse of window function ntile()

lag(expr),(expr, offset),(expr, offset, default)

 前のレコードを取得する。

select lag(point) from student_grades;
Error: misuse of window function lag()

lead(expr),(expr, offset),(expr, offset, default)

 1つ次のレコードを取得する。

select lead(point) from student_grades;
Error: misuse of window function lead()

first_value(expr)

 先頭レコードを取得する。

select first_value(point) from student_grades;
Error: misuse of window function first_value()

last_value(expr)

 末尾レコードを取得する。

select last_value(point) from student_grades;
Error: misuse of window function last_value()

nth_value(expr, N)

 点数が2番目のレコードを取得する。

select nth_value(point, 2) from student_grades;
Error: misuse of window function nth_value()

所感

 over句を省略しても使えなかった。どゆこと? 翻訳マジック? もしかして窓関数の代わりに集計関数を使えるって意味だったの?

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで