SQLite3で値が大きい順、例えば所持金が多いユーザー上位10名順に並べてみるということをしてみます。
使用するデータはパイソンでgimeiでSQLite3のテストデータを用意してみるで作成したものを使います。
※ sample.sqlite3のパスが/path/to/dir/sample.sqlite3で話を進めます。
# sample.sqlite3があるディレクトリまで移動 $ cd /path/to/dir $ sqlite3 sample.sqlite3
最初に所持金の多いユーザー順に並べてみます。
sqlite> SELECT * FROM users ORDER BY money DESC;
+-----+------+-------+ | id | name | money | +-----+------+-------+ | 385 | 礼子 | 9955 | | 276 | 拓也 | 9946 | | 318 | 夢花 | 9836 | (途中省略) +-----+------+-------+
のような結果が出力されました。
SELECT * FROM テーブル名 ORDER BY カラム名 ASC(昇順) or DESC(降順)
ORDER BY句を末尾に追加することで、任意のカラム名でASC(昇順、下に行く程数値が大きくなる)かDESC(降順、下に行く程数値が小さくなる)で並び順を指定できるようになります。
所持金の額が上位10件になるようにSQLを書き換えます。
sqlite> SELECT * FROM users ORDER BY money DESC LIMIT 10;
+-----+------+-------+ | id | name | money | +-----+------+-------+ | 385 | 礼子 | 9955 | | 276 | 拓也 | 9946 | | 318 | 夢花 | 9836 | | 209 | 輝彦 | 9828 | | 384 | 春奈 | 9812 | | 167 | 臣雄 | 9796 | | 230 | 安弘 | 9640 | | 125 | 康夫 | 9582 | | 250 | 琢真 | 9562 | | 140 | 達彦 | 9523 | +-----+------+-------+
のような結果が出力されました。
SELECT * FROM テーブル名 ORDER BY カラム名 ASC(昇順) or DESC(降順) LIMIT 10;
LIMIT句を追加することで表示件数を指定することができます。
LIMIT句はORDER BY句よりも必ず後に書くことが重要です。
上位11〜20位までのデータを出力してみます。
sqlite> SELECT * FROM users ORDER BY money DESC LIMIT 10 OFFSET 10;
LIMIT 10の後にOFFSET句を追加します。
OFFSETの後に指定する値(今回は10)は表示を飛ばす件数になっていまして、今回は上位10位までの出力を飛ばし、11位から10件の11〜20位までのデータを出力する事になります。
SELECT 列名 FROM テーブル名 LIMIT 行数 OFFSET スキップする行数;