SQL の FETCH FIRST n ROWS構文で Top n や 同ソートキー値のレコードを抽出する。(Oracle Database 12c)
Oracle Database 12c で追加された FETCH FIRST n ROWS構文を使うと、
Top n や 同ソートキー値のレコードを抽出できるんやで彡(゚)(゚)
サンプルは以下のデータ
SELECT MIN(C1) AS C1_MIN , MAX(C1) AS C1_MAX , COUNT(C1) AS C1_CNT , COUNT(DISTINCT C1) AS C1_NUM_DISTINCT FROM TBL_A; C1_MIN C1_MAX C1_CNT C1_NUM_DISTINCT ---------- ---------- ---------- --------------- 1 10000 10001 10000 SELECT C1, C2 FROM TBL_A WHERE C1 = 3; C1 C2 ---------- ---------- 3 REC3 3 RECCHOFUKU ★C1=3のレコードのみ重複
以下のSQLでTop n(例はTop 3)を抽出彡(゚)(゚)
-- Top 3 を抽出 SELECT C1, C2 FROM TBL_A ORDER BY C1 FETCH FIRST 3 ROWS ONLY; C1 C2 ---------- ---------- 1 REC1 2 REC2 3 REC3
OFFSET句を使って6個目〜10個目のレコードを抽出彡(゚)(゚)
※OFFSET句はORDER BYのキー値重複を考慮しないから、ランキングには使い辛いのか。。。彡(-)(-)
-- 6個目〜10個目のレコードを抽出 SELECT C1, C2 FROM TBL_A ORDER BY C1 OFFSET 5 ROWS FETCH FIRST 5 ROWS ONLY; C1 C2 ---------- ---------- 5 REC5 6 REC6 7 REC7 8 REC8 9 REC9 ※◎の5レコードを飛ばして★の部分のレコードを抽出している。 C1 C2 ---------- ---------- 1 REC1 ◎ 2 REC2 ◎ 3 REC3 ◎ 3 RECCHOFUKU◎ 4 REC4 ◎ 5 REC5 ★ 6 REC6 ★ 7 REC7 ★ 8 REC8 ★ 9 REC9 ★ 10 REC10 11 REC11
下記のように3位3個目のレコードのみ抽出も可能やで彡(゚)(゚)
-- 3個目のみ抽出 SELECT C1, C2 FROM TBL_A ORDER BY C1 OFFSET 2 ROWS FETCH FIRST 1 ROWS ONLY; C1 C2 ---------- ---------- 3 REC3
上記例だと同ソートキー値の他レコードは出ていないんやけど、
ONLY ⇒ WITH TIES に変更すると同ソートキー値のレコードも抽出されるで彡(゚)(゚)
-- Top3(同順位含む) SELECT C1, C2 FROM TBL_A ORDER BY C1 FETCH FIRST 3 ROWS WITH TIES; C1 C2 ---------- ---------- 1 REC1 2 REC2 3 REC3 3 RECCHOFUKU -- 3個目のみ抽出(同キーの他レコード含む) SELECT C1, C2 FROM TBL_A ORDER BY C1 OFFSET 2 ROWS FETCH FIRST 1 ROWS WITH TIES; C1 C2 ---------- ---------- 3 REC3 3 RECCHOFUKU
マニュアルも見てクレメンス彡(^)(^)
Oracle Database SQL言語リファレンス 12cリリース1 (12.1) B71278-10SELECT
row_limiting_clause
http://docs.oracle.com/cd/E57425_01/121/SQLRF/statements_10002.htm#BABHFGAA> row_limiting_clauseを使用すると、問合せから返される行数を制限できます。
> オフセットと、返される行数または行数の割合を指定できます。
> この句は、上位N番のレポートを実装するために使用できます。
> 結果の一貫性を保つには、order_by_clauseを指定して、ソート順序を決定的にします。
Qiitaにも書いたやで彡(゚)(゚)
SQL の FETCH FIRST n ROWS構文で Top n や
同ソートキー値のレコードを抽出する。(Oracle Database 12c)
http://qiita.com/ora_gonsuke777/items/7ac5d4579b7c3c322dcc