PostgreSQL 8.4 以上で使えるようになったウィンドウ関数
テーブルのレコード総数を SELECT句に含めたい場合 COUNT(1) OVER() を指定する。
SELECT *, COUNT(1) OVER() AS total FRON items
これは、MySQL でも使える。
同様に行番号を SELECT句に付与したい場合は、ROW_NUMBER()関数で
ROW_NUMBER() OVER()
か、
ROW_NUMBER() OVER(ORDER BY ソートしたい列 ASC)
を使用する。
この ROW_NUMBER() を使えば以下の様にも、LIMIT~OFFSET のような目的のクエリを
書くこともできる
SELECT a.* FROM ( SELECT *, ROW_NUMBER() OVER(ORDER BY id ASC) AS rownum FROM items WHERE 1=1 ) a WHERE a.rownum >=1 AND a.rownum <=15 ORDER BY a.rownum ASC
これは、MySQL でも同じように書ける。