MySQLで上位N行を取得する方法
テーブルから上位N行を取得することは、データベースを扱ううえで基本的な作業です。このチュートリアルでは、MySQLでこれを実現する方法を実践的な例とともに解説します。
読み進める前に、私たちのモダンなMySQLクライアント、Beekeeper Studioをご紹介させてください。テーブルを開けば行を自動でページ送りしてくれますし、右クリックして「SQL: Select Top」を選べばクエリを取得できます。MySQLでは無料でご利用いただけます。こちらからダウンロードしてください。
LIMIT句を使う
MySQLのLIMIT句は、クエリの結果セットから返す行数を指定するシンプルな方法です。
例:上位5行を取得する
次のスキーマを持つemployeesという名前のテーブルがあるとします。
CREATE TABLE employees (
id INT,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
給与の降順で上位5人の従業員を取得したいとします。
SELECT id, name, salary
FROM employees
ORDER BY salary DESC
LIMIT 5;
仕組み:
-
ORDER BY salary DESCは、給与の高い順に行を並べ替えます。 -
LIMIT 5は、並べ替え後の最初の5行に出力を制限します。
出力結果:
+----+----------+--------+
| id | name | salary |
+----+----------+--------+
| 3 | Alice | 90000 |
| 5 | Bob | 85000 |
| 2 | Charlie | 75000 |
| 6 | Diana | 70000 |
| 4 | Edward | 68000 |
+----+----------+--------+
LIMITで同値を扱う
値が同じ行がある場合、LIMITを使うだけでは、同値への追加の対処をしない限り一貫した結果が得られないことがあります。同値を区別するには、ORDER BYで複数の列を指定します。
例:第2ソートキーを追加して同値を扱う
給与が同じ場合に対処するため、従業員のidを第2ソートキーとして並べ替えます。
SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC
LIMIT 5;
仕組み:
id ASCを追加することで、給与が同じ場合でもidの小さい従業員が常に選ばれるようになります。
LIMITでページネーションを行う
上位N行を取得するだけでなく、特定の範囲の行を取得して結果をページ分割したい場合もよくあります。
例:次の5行を取得する
結果をページ分割し、給与順で6〜10行目を取得するには:
SELECT id, name, salary
FROM employees
ORDER BY salary DESC
LIMIT 5 OFFSET 5;
仕組み:
-
LIMIT 5は返す行数を指定します。 -
OFFSET 5は最初の5行をスキップします。
出力結果:
上位5人に続く次の5人の従業員:
+----+---------+--------+
| id | name | salary |
+----+---------+--------+
| 1 | Frank | 67000 |
| 7 | Grace | 64000 |
| 8 | Hannah | 60000 |
| 9 | Ivan | 59000 |
| 10 | Jane | 58000 |
+----+---------+--------+
まとめ
MySQLでLIMIT句を使って上位N行を取得するのは、効率的で簡単です。同値が発生する可能性がある場合は、ORDER BYに列を追加して並び順を安定させましょう。このシンプルなテクニックは、特に大規模なデータセットを扱う際の分析やレポート作成など、多くの用途で欠かせません。
これらのテクニックを習得すれば、MySQLでのデータの取得や操作をより自在にコントロールできるようになります。
Beekeeper Studioは無料&オープンソースのMySQL GUIです
最近MySQLの作業でBeekeeper Studioを使っていますが、あっという間にお気に入りのデータベースツールのひとつになりました。インターフェースはすっきりとモダンで、気が散る要素がありません。他のツールにありがちなごちゃごちゃ感がなく、クエリに集中できます。 - Surendra Singh
Beekeeper Studioは高速で直感的、使いやすいMySQLクライアントです。他の多くのデータベースにも対応しており、Windows、Mac、Linuxで快適に動作します。
MySQLユーザーによるBeekeeper Studio利用者の声
何年もphpMyAdminを使ってきた後にこのプログラムを選びました。より高品質な世界に足を踏み入れたような感覚で、ユーザーのことを本当に大切に考えてくれていると心から感じました。コンセプトそのもの、実装、実際の使い心地、そのすべてについてMatthewに心から感謝しています。
素晴らしいツールです。PostgresとMySQLのDB管理用として、これまでで最も実用的なIDEです。面倒なことなく、とにかくちゃんと動きます :-)