Top N Sort

投稿日 : 2006年11月11日 0:35
恥ずかしながら、最近TOP句を知りました・・・

テーブルAをcolBでソートして、先頭の10件を取得するクエリ
SELECT TOP 10 *
  FROM A
 ORDER BY colB;

ここでふと疑問が・・・
Topが先か、Orderが先か。

心配になったので実行計画をとってみると、
「Top N Sort」っていう計画になっていて、
OrderしてからTopされてました。

うろ覚えですが、確かOracleSqlだと下記のようにしないと
正しい結果にならなかったような気が・・・
SELECT *
  FROM (SELECT * FROM A ORDER BY colB) ORDER_DATA
 WHERE ROWNUM <= 10;


何気にTOP句ってすごいなぁと思った今日この頃でした^^;

フィードバック

# re: Top N Sort

2006/11/12 16:46 by 夏椰
こんにちは(^-^)

オラクルで頭N件なら
サブクエリ化しなくてもよかったはずです。
頭からの番号は確定してますから。

N?M件のパターンはサブクエリにして行番号を確定させる必要があったと思います。
#携帯書き込みで検証なしで書き込んでますんで
#間違えているかも?
#そん時はごめんなさぃ

SQLServerのTOP句、PostgreSQLのLimitは確かに便利(o^_^o)

# re: Top N Sort

2006/11/19 1:01 by 夏椰
あぅ、勘違いしていました。
N~Mをとる話ではなく、
ソートして頭N件ですよね。

で、Oracleはうろ覚えだったので、
やってみたところ、WHERE句にROWNUMの条件を入れて、ORDER BYつけたらうまくいかなかったです。
失礼しました。

で、ROW_NUMBER分析関数はWHERE句に直指定できないので、
サブクエリ化するしかないんっすねぇ。

お勉強させていただきました(^^)

# JMvEbiBqTYOZK

2012/01/04 6:34 by http://www.kosherbeefjerky.com/
jE2OG4 The text is promising, will place the site to my favorites..!

# rXqkgtmMcLsj

2014/08/07 11:13 by http://crorkz.com/
HRw8pY Thanks a lot for the blog article.Thanks Again. Fantastic.
コメントの入力
タイトル
名前
Url
コメント