MySQLのGROUP BY句は複数列でもDISTINCT句のように使える?違いを実例で解説
MySQLでは、DISTINCT句と同様に、GROUP BY句も複数の列に対して使用することができます。以下の例では、テーブル「testing」の「fname」列と「Lname」列に対して、最初のクエリでDISTINCT句を使用し、2番目のクエリでGROUP BY句を使用しています。
mysql> Select * from testing; +------+---------+---------+ | id | fname | Lname | +------+---------+---------+ | 200 | Raman | Kumar | | 201 | Sahil | Bhalla | | 202 | Gaurav | NULL | | 203 | Aarav | NULL | | 204 | Harshit | Khurana | | 205 | Rahul | NULL | | 206 | Piyush | Kohli | | 207 | Lovkesh | NULL | | 208 | Gaurav | Kumar | | 209 | Raman | Kumar | +------+---------+---------+ 10 rows in set (0.00 sec) mysql> Select DISTINCT FNAME,LNAME from testing; +---------+---------+ | FNAME | LNAME | +---------+---------+ | Raman | Kumar | | Sahil | Bhalla | | Gaurav | NULL | | Aarav | NULL | | Harshit | Khurana | | Rahul | NULL | | Piyush | Kohli | | Lovkesh | NULL | | Gaurav | Kumar | +---------+---------+ 9 rows in set (0.00 sec) mysql> Select Fname, LNAME from testing GROUP BY Fname,Lname; +---------+---------+ | Fname | LNAME | +---------+---------+ | Aarav | NULL | | Gaurav | NULL | | Gaurav | Kumar | | Harshit | Khurana | | Lovkesh | NULL | | Piyush | Kohli | | Rahul | NULL | | Raman | Kumar | | Sahil | Bhalla | +---------+---------+ 9 rows in set (0.00 sec)
上記の実行結果を見ると、どちらのクエリも9行の重複なしの組み合わせを返しており、複数列での重複除去という目的においては同じ動作をしていることがわかります。
DISTINCT句とGROUP BY句の唯一の違い
両者の唯一の違いは、結果セットの並び順です。GROUP BY句を使用したMySQLクエリの結果セットはソート(並べ替え)された状態で返されます。一方、DISTINCT句を使用したクエリの結果セットはソートされないまま返されます。
使い分けのポイント
- 単純に重複行を除外したい場合:意図が明確になるため、DISTINCT句の使用が推奨されます。
- COUNTやSUMなどの集計関数と組み合わせたい場合:GROUP BY句を使用する必要があります。
- 結果を特定の順序で取得したい場合:いずれの場合も、ORDER BY句を明示的に指定するのが確実です。
なお、GROUP BYによる暗黙的なソートはMySQLのバージョンによって保証されない場合があるため、順序が必要な場面では必ずORDER BY句を併用するようにしましょう。
-
MySQLのLIKE句を使って「Joh」で始まる複数の値を取得する方法
まず、テーブルを作成します。mysql> create table DemoTable ( Name varchar(40) ); Query OK, 0 rows affected (0.55 sec)次に、INSERTコマンドを使用してテーブルにレコードを挿入します。mysql> insert into DemoTable values(John); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(Sam); Query OK, 1 row affected (0.13
-
MySQLのWHERE句で複数の値を取得する方法(OR演算子の使い方)
はい、MySQLのWHERE句でも複数の値を取得できます。その場合は、OR演算子を使って複数の条件を組み合わせます。この記事では、実際にサンプルテーブルを作成し、WHERE句とOR演算子を組み合わせて複数の条件に一致するレコードを取得する手順を、具体的なSQL文とともに解説します。1. サンプルテーブルの作成まず、従業員情報を格納するテーブルを作成します。mysql> create table DemoTable1421 -> ( -> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY, ->