SQLite3で値が大きい順に並べてみる

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 スキップする行数;
京都の東本願寺で開催されているプログラミング教室で講師をしています。
詳しくはTera schoolを御覧ください。
マインクラフト用ビジュアルエディタを開発しています。

詳しくはinunosinsi/mcws_blockly - githubをご覧ください。