PostgreSQLでSQL_CALC_FOUND_ROWS的なことをしたい
MySQLだと、
SELECT SQL_CALC_FOUND_ROWS `hoge` ,`fuga` FROM `piyopiyo_table` WHERE `hoge` > 10 LIMIT 0, 5
というふうに「SQL_CALC_FOUND_ROWS」をくっつけたSELECT文を発行した直後に
SELECT FOUND_ROWS();
とやってやれば、LIMITで制限されていない全件数を知ることができるのですが
PostgreSQLだとどうやるのかなーと思って調べてみたところ、こんな感じでした。
SELECT "hoge" ,"fuga" ,COUNT(*) OVER() AS "found_rows" FROM "piyopiyo_table" WHERE "hoge" > 10 LIMIT 5 OFFSET 0
「抽出した全レコードにくっついてくること」と「全件数は1以上だがLIMITOFFSETで絞り込んだら0件になるときは取得できないこと」がなかなか気持ち悪いですが、
2回同じようなクエリ発行するよりはマシなケースも多々ありそう。
OVERについてはいろいろ使えそうなので勉強したい。
参考
PostgreSQLで総件数とページングデータを同時に取得する
Window関数 | Let's Postgres