複雑めなSQLを書く時に重宝している Snippet を記録していこうかと。
COUNT(row.*) OVER()
LIMIT を越えて全件数を取得する
ポイントは Window Function の OVER()
。Window Function がなんなのか、細かいことはよく理解できていない。
基本的にリストを取得する時はページネーションを行なっていると思うけど、LIMIT を設定した状態で COUNT を実行しても、LIMITまでの数値しか出ないところを、一発で取得できるようにしてくれる。
一発のSQLで取得できるのは楽だけど、ライブラリとの関係で使いづらかったりする時もあるかも。
ROW_NUMBER() OVER(PARTITION BY column ORDER BY DESC)
1体多の関連テーブルから特定の条件で1件だけ取得する
このSQL単体では機能しないけど、このSQLを含めたサブクエリを利用することで、例えば「最新の一件」とかを取得できる。
「リストを取得するタイミングで関連するテーブルの情報を一見だけ欲しい!」みたいな時にアプリケーション側でのマージ作業を省けるのが嬉しいところ。
この snippet を知ったのはこの Stack Overflow から
とりあえずそんな感じで。