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

MySQLで結果セットから一意の行のみを取得するには?DISTINCTキーワードの使い方

MySQLでクエリを実行した際、テーブル内に完全に同じ内容の行が複数存在することがあります。こうした重複行を取り除き、一意(ユニーク)な行だけを結果セットとして取得したい場合は、SELECT文にDISTINCTキーワードを使用します。

基本的な構文

SELECT DISTINCT カラム名 FROM テーブル名;

DISTINCTを指定すると、SELECTで選択されたすべてのカラムの値が完全に一致する行は1つにまとめられ、重複行が除外された結果が返されます。

実例:重複データを含むテーブル

まず、重複行を含むテーブル「names」の中身を確認してみましょう。

mysql> Select * from names;

+------+-----------+
| id   | name      |
+------+-----------+
| 1    | Rahul     |
| 2    | Gaurav    |
| 3    | Raman     |
| 4    | Aarav     |
| 5    | Ram       |
| 5    | Ram       |
| 5    | Ram       |
+------+-----------+

7 rows in set (0.00 sec)

この結果を見ると、「id = 5 / name = Ram」の行が3件重複して登録されていることがわかります。全7行のうち、実際に異なるデータは5行だけです。

DISTINCTを使って重複行を除外する

そこで、次のようにDISTINCTキーワードを追加してクエリを実行します。

mysql> Select DISTINCT * from names;

+------+-----------+
| id   | name      |
+------+-----------+
| 1    | Rahul     |
| 2    | Gaurav    |
| 3    | Raman     |
| 4    | Aarav     |
| 5    | Ram       |
+------+-----------+

5 rows in set (0.00 sec)

実行結果は7行から5行に減り、重複していた「Ram」の行が1件だけ残りました。このように、SELECT文にDISTINCTを付けるだけで、結果セットから完全な重複行を簡単に排除できます。

補足ポイント

  • 複数カラムの指定:「SELECT DISTINCT id, name ...」のように特定カラムだけを対象にすることも可能です。その場合、指定したカラムの組み合わせが同じ行がまとめられます。
  • NULLの扱い:DISTINCTではNULL値も同一の値として扱われ、複数のNULL行は1行にまとめられます。
  • パフォーマンス:大量データに対してDISTINCTを使うと並べ替え処理が発生するため、必要なカラムだけを指定するなど、クエリの最適化を意識すると良いでしょう。

  1. MySQLですべての行の列の合計を取得する方法

    MySQLですべての行における特定の列の合計値を取得するには、集計関数SUM()を使用します。ここでは、実際にテーブルを作成し、データを追加したうえで、列の合計を求める手順を順番に解説していきます。 1. サンプルテーブルの作成 まず、合計を計算する対象となるテーブルを作成しましょう。以下の例では、IdとAmountという2つの列を持つ「DemoTable」を作成しています。 mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Amount int ); Quer

  2. MySQLで結果セットを指定した順序どおりに取得する方法

    MySQLでIN句を使ってレコードを取得すると、通常はテーブル内の格納順どおりに結果が返されます。しかし、「指定した値の並び順どおりに結果セットを取得したい」というケースもあります。そんなときは、FIND_IN_SET()関数とORDER BY句を組み合わせることで簡単に実現できます。サンプルテーブルを作成するまず、動作確認用のテーブルを作成します。mysql> create table DemoTable1563 -> ( -> StudentId int, -> StudentName varchar(20) -> );Query OK