GROUP BYを使わずにMySQLで重複行を削除する方法|DISTINCTキーワードの使い方
重複する行を削除して一意のレコードだけを取得したい場合、DISTINCTキーワードを使用することで簡単に実現できます。ここでは、実際にテーブルを作成しながら手順を確認していきましょう。
テーブルの作成
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable1801
(
Name varchar(20),
Score int
);
Query OK, 0 rows affected (0.00 sec)
レコードの挿入
次に、INSERTコマンドを使ってテーブルにレコードを挿入します。あえて同じデータ(John, 98)を2件登録している点に注目してください。
mysql> insert into DemoTable1801 values('John',98);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1801 values('John',98);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1801 values('John',99);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1801 values('Carol',99);
Query OK, 1 row affected (0.00 sec)
全レコードの表示
SELECT文でテーブル内のすべてのレコードを表示してみます。
mysql> select * from DemoTable1801;
以下のような出力結果が得られます。
+-------+-------+ | Name | Score | +-------+-------+ | John | 98 | | John | 98 | | John | 99 | | Carol | 99 | +-------+-------+ 4 rows in set (0.00 sec)
ご覧のとおり、「John, 98」という組み合わせが重複して登録されています。
DISTINCTキーワードで重複行を除外する
重複を除外して一意のレコードのみを取得するには、SELECT文にDISTINCTキーワードを指定します。
mysql> select distinct Name,Score from DemoTable1801;
実行すると、以下の出力結果が得られます。
+-------+-------+ | Name | Score | +-------+-------+ | John | 98 | | John | 99 | | Carol | 99 | +-------+-------+ 3 rows in set (0.00 sec)
このように、DISTINCTキーワードを使うことで、NameとScoreの組み合わせが完全に一致する重複行が除外され、4件だったレコードが3件に絞り込まれました。GROUP BY句を使わなくても、シンプルに重複データを排除できるのが大きなポイントです。
-
MySQLでGROUP BYを使って学生ごとの点数をグループ化し、合計点数を表示する方法
はじめにMySQLで学生ごとに点数(マーク)をグループ化し、それぞれの合計点数を求めるには、GROUP BY句とSUM()関数を組み合わせて使用します。本記事では、実際のサンプルコードと実行結果をもとに、その手順をわかりやすく解説します。1. サンプルテーブルを作成するまず、学生名と点数を格納するためのテーブルを作成します。mysql> create table DemoTable1920 ( StudentName varchar(20), StudentMarks int );Query
-
MySQLでGROUP BYを使ってグループごとの列の最大値を取得する方法
MySQLでは、GROUP BY句とMAX()関数を組み合わせることで、グループごとに特定の列の最大値を簡単に取得できます。本記事では、その基本的な構文と具体的な使用例をわかりやすく解説します。基本構文グループごとに列の最大値を求めるには、以下のようなSQLクエリを使用します。SELECT colName1, MAX(colName2)FROM tableNameGROUP BY colName1ORDER BY colName1;実例:PRODUCTテーブルでの最大価格の取得それでは、実際の例を見てみましょう。ここでは、記事(Article)ごとの価格(Price)が登録された「PRODUC