MySQLで上位2つの最高スコアを取得するクエリの書き方
MySQLで上位2つの最高スコアを取得するには、集計関数 MAX() を使用します。GROUP BY句でプレイヤーIDごとにグループ化し、ORDER BY句で降順に並べ替えることで、最も高いスコア順に結果を表示できます。
1. サンプルテーブルを作成する
まず、以下のようにテーブルを作成します。
mysql> create table DemoTable1383 &;-> ( &;-> Id int, &;-> PlayerScore int &;-> ); Query OK, 0 rows affected (0.90 sec)
ここでは、プレイヤーIDを格納する「Id」と、スコアを格納する「PlayerScore」の2つのカラムを持つテーブルを用意しました。
2. テーブルにレコードを挿入する
次に、INSERT文を使ってサンプルデータを登録します。
mysql> insert into DemoTable1383 values(200,78); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1383 values(200,89); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable1383 values(200,89); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1383 values(200,87); Query OK, 1 row affected (0.29 sec) mysql> insert into DemoTable1383 values(203,97); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable1383 values(200,57); Query OK, 1 row affected (0.17 sec)
3. 登録したデータを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1383;
実行すると、次のような結果が得られます。
+------+-------------+ | Id | PlayerScore | +------+-------------+ | 200 | 78 | | 200 | 89 | | 200 | 89 | | 200 | 87 | | 203 | 97 | | 200 | 57 | +------+-------------+ 6 rows in set (0.00 sec)
4. 最高スコアを降順で取得するクエリ
それでは、IDごとの最高スコアを重複なく抽出するクエリを見ていきましょう。
mysql> select Id,max(PlayerScore) from DemoTable1383 group by Id order by max(PlayerScore) DESC;
このクエリを実行すると、以下の出力が得られます。
+------+------------------+ | Id | max(PlayerScore) | +------+------------------+ | 203 | 97 | | 200 | 89 | +------+------------------+ 2 rows in set (0.00 sec)
クエリのポイント解説
このクエリが動作する仕組みは以下の通りです。
- GROUP BY句: Idごとにレコードをグループ化し、それぞれのグループ単位で集計を行います。
- MAX()関数: 各グループ内のPlayerScoreの中から最大値を取り出します。例えばId=200の場合、78・89・89・87・57の中で最も大きい89が返されます。
- ORDER BY ~ DESC: 最大スコアを降順に並べ替えることで、スコアの高い順に結果を表示します。
その結果、上位2つの最高スコアである「97(Id=203)」と「89(Id=200)」が表示されました。なお、レコード数が多いテーブルで厳密に上位2件だけを取得したい場合は、クエリの末尾に LIMIT 2 を追加すると確実です。
-
MySQLで2つの列の組み合わせごとの出現回数を集計する方法
MySQLでは、GROUP BY句とGREATEST()・LEAST()関数を組み合わせることで、2つの列にまたがる値の組み合わせごとの出現回数を簡単に集計できます。この記事では、具体的なサンプルを使って手順を解説します。1. サンプルテーブルを作成するまず、2つの名前列を持つテーブルを作成します。mysql> create table DemoTable -> ( -> Name1 varchar(20), -> Name2 varchar(20) -> );Query OK, 0 rows affected (0.61 sec)2. テ
-
MySQLで重複するタプルを検出してカウントを表示する方法
MySQLで重複するタプル(同じ値の組み合わせを持つ行)を検出し、その出現回数を表示するには、GROUP BY句とHAVING句を組み合わせて使用します。この記事では、テーブルの作成から重複検出クエリの実行まで、手順を追って解説します。 サンプルテーブルの作成 まず、デモ用のテーブルを作成します。 mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.80 sec) テストデータの挿入