質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

6回答

16476閲覧

【postgres】order byして、上位10000を降順で取得する

naoyan

総合スコア604

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

1グッド

1クリップ

投稿2015/02/24 15:36

編集2015/03/04 06:15

こんばんわ。

今、SQL作っているのですが、以下のSQLでは上位30位までしか取得できません。

上位10000位ぐらいまで取得するためにはどうのようにしたらよいのでしょうか。

ご享受よろしくお願い致します。

lang

1select 2 xxx 3from 4 yyy 5 6order by zzz 7
fumi35👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/03/04 06:12

文言修正「ご教授」→「ご享受」 よろしくお願い致します!
guest

回答6

0

ベストアンサー

MySQLならtomomoさんのがほぼ答えだと思います。
少し厳密に書くと、

lang

1limit 10000

だと先頭から1万件

lang

1limit 10000,10000

だと一番先頭の番号が0なので10001件目から10000件を取得する感じですね。

SQLSERVERだとlimitが無いので、2008より前ならROW_NUMBERを使う、2012以降ならOFFSETですかね。

ちょっと気になるのは質問者さんのSQL文だと本来は「全件」取得してくるはずです。
(メモリが許せば、DBに10万件入ってれば10万件取ってくる)
それが30件位だけ取得されるってのは何か他に原因がありませんか??

後は揚げ足で申し訳ないですが、降順なら

lang

1ORDER BY XXX DESC

ですね。

投稿2015/02/24 17:36

landy77

総合スコア1614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

limit みたいなのを使えばよかったような。
多分以下みたいな感じ。

lang

1select 2 xxx 3from 4 yyy 5order by zzz 6limit 10000

投稿2015/02/24 16:41

tomomo

総合スコア430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんな感じですかね?

lang

1select 2 xxx 3from 4 yyy 5order by zzz desc 6limit 10000 7offset 0

投稿2015/02/24 20:48

h-yoshinaka

総合スコア118

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

landy77様も言及されていますが、
where句で絞りこんでいないのに上位30位までしか表示されない・・・?
orderby句はデータを絞るような機能は無いはずですが・・・。

私も他に原因があるように思います。
作成したsqlをもう少し詳細に記載していただくことはできませんか?
あと、from句に指定したテーブルの行数もお忘れなく。

<余談>
あくまで私の経験則ですが、
実装したプログラムが思い通りに動かない場合の原因の9割以上が
「うっかり」や「見落とし」、「勘違い」といったイージーミスです。

 SqlServerだとManagementStudioというGUIツールで複数サーバに
接続してSqlを発行できるので、Aサーバで発行したつもりが、
実はBサーバで発行してたなんていうケースもあります。
(実体験です)

ちなみに、スレの流れを受けて上位○○位を表示するとき、
SQLServerの場合は「top」を使います。

lang

1select top (10000) 2 column1 3 ,column2 … 4 from table1 5 order by columnX

投稿2015/02/25 01:28

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もし psql を使用していて、コンソールの画面一杯までしか表示されないのであれば(ようするにページャーで表示されているのであれば)、下記を打ち込めばページャーが無効になって一気に全部表示されるようになります。

¥pset pager

投稿2015/02/25 00:22

ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naoyan

2015/02/25 06:09

これってどこに打ち込めばよいのでしょうか? 基本的な質問で大変申し訳ございません。
ngyuki

2015/02/25 06:54

(あくまでも、もし psql を使っていればですが)psql のコンソール上でです。
hotta

2015/03/05 15:04

(あくまでも psql 前提ですが) $ psql psql (バージョン表示) "help" でヘルプを表示します. xxxxx=# help PostgreSQL へのコマンドライン・インターフェース、psql へようこそ。 \copyright とタイプすると、配布条件を表示します。 \h とタイプすると、SQL コマンドのヘルプを表示します。 \? とタイプすると、psql コマンドのヘルプを表示します。 \g と打つかセミコロンで閉じると、問い合わせを実行します。 \q で終了します。 xxxxx=# このプロンプト上で、\? で \pset 等の解説が見れます。 通常のアルファベットで始まる何かを入力すると、 SQL として解釈されます。
guest

0

他の方が回答されている通り、limitを使うのが正解です。
何故30件しか表示されないか、恐らく、mysqlクライアントなどで直接打つのでは無く、phpMyAdminのようなものでSQLを実行していませんか?
そのような場合、勝手にlimitがつく場合があります。
実際に発行されたクエリも表示されるかと思いますので、そちらもよく観察されると良いと思います。

投稿2015/03/17 06:26

terushu

総合スコア358

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問