MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで重複する列値から対応する最大値を取得するクエリの書き方

はじめに

データベースを扱っていると、同じ値が繰り返し登録されている列(重複する列値)の中から、それぞれに対応する最大値を取り出したい場面があります。たとえば「同じ商品名の中で最も高い価格はいくらか」を知りたいときなどです。

本記事では、GROUP BY句とMAX()関数を組み合わせることで、重複する列値ごとの最大値を簡単に取得する方法を解説します。

サンプルテーブルの作成

まず、動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable(
    ProductName varchar(100),
    ProductPrice int
);
Query OK, 0 rows affected (0.68 sec)

レコードの挿入

次に、INSERT文を使ってサンプルデータを挿入します。ここでは、同じ商品名(Product-1、Product-2、Product-3)を意図的に複数回登録しています。

mysql> insert into DemoTable values('Product-1',56);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Product-2',78);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values('Product-1',88);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Product-2',86);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Product-1',45);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('Product-3',90);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Product-2',102);
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values('Product-3',59);
Query OK, 1 row affected (0.13 sec)

テーブルの内容を確認する

SELECT文ですべてのレコードを表示し、データが正しく登録されているか確認しておきましょう。

mysql> select *from DemoTable;

実行すると、以下のような結果が出力されます。

+-------------+--------------+
| ProductName | ProductPrice |
+-------------+--------------+
| Product-1 | 56 |
| Product-2 | 78 |
| Product-1 | 88 |
| Product-2 | 86 |
| Product-1 | 45 |
| Product-3 | 90 |
| Product-2 | 102 |
| Product-3 | 59 |
+-------------+--------------+
8 rows in set (0.00 sec)

重複する列値ごとに最大値を取得するクエリ

それでは本題です。重複する列値(ここではProduct-1、Product-2などの商品名)ごとに、対応するProductPriceの最大値を取得するには、以下のようにGROUP BY句とMAX()関数を組み合わせます。

mysql> select ProductName,MAX(ProductPrice) from DemoTable group by ProductName;

このクエリを実行すると、以下のような結果が得られます。

+-------------+-------------------+
| ProductName | MAX(ProductPrice) |
+-------------+-------------------+
| Product-1 | 88 |
| Product-2 | 102 |
| Product-3 | 90 |
+-------------+-------------------+
3 rows in set (0.00 sec)

クエリのポイント

  • GROUP BY句:同じ値を持つ行(ここではProductName)をひとつのグループにまとめます。
  • MAX()関数:各グループ内で指定した列(ここではProductPrice)の最大値を返します。

この2つを組み合わせることで、重複する値ごとに集計処理を行い、それぞれのグループにおける最大値だけを効率的に抽出できます。価格のほかにも、売上数や日付など、さまざまな列に応用できるテクニックなので、ぜひ覚えておきましょう。

  1. MySQLで列の最大値を取得する方法をわかりやすく解説

    MySQLで特定の列の最大値を取得するには、MAX(columnName)関数を使用します。本記事では、その基本的な使い方に加えて、データベースやテーブルの設計に関する前提知識もあわせて解説します。MySQLのデータベースとテーブルの基礎MySQLをインストールする前に、まず使用するバージョンと配布形式(バイナリファイルか、ソースファイルからビルドするか)を決定することが重要です。新しく作成したばかりのデータベースには、当然ながらテーブルはまだ存在しません。データベース設計において最も重要なのは、以下の要素を決めることです。データベース全体の構造必要となるテーブルの一覧各テーブルに含まれる列(

  2. MySQLで列から最大値を取得する方法

    MySQLで列の最大値を取得するには?MySQLのテーブルから特定の列の最大値を取得するには、ORDER BY句とLIMIT句を組み合わせる方法が便利です。ここでは、実際にテーブルを作成し、データを挿入して、最大値を取得する手順を順番に解説します。1. テーブルを作成するまず、以下のコマンドでサンプル用のテーブルを作成します。mysql> create table DemoTable -> ( -> Value int -> ); Query OK, 0 rows affected (0.63 sec)2. レコードを挿入する次に、INSERTコ