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

MySQLで検索結果を1行にまとめて表示する方法|GROUP_CONCAT()の使い方

MySQLでは、GROUP_CONCAT() 関数を使うことで、複数行に分かれた検索結果を1行にまとめて表示できます。この記事では、実際にテーブルを作成し、データを登録したうえで、GROUP_CONCAT() の具体的な使い方を実行例つきで解説します。

サンプルテーブルの作成

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

mysql> create table DemoTable1507
    -> (
    -> Name varchar(20),
    -> PaperSet int
    -> );
Query OK, 0 rows affected (0.68 sec)

テストデータの挿入

続いて、INSERT文を使っていくつかのレコードを登録します。

mysql> insert into DemoTable1507 values('Chris',111);
Query OK, 1 row affected (0.37 sec)
mysql> insert into DemoTable1507 values('David',112);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1507 values('Mike',111);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1507 values('Bob',113);
Query OK, 1 row affected (0.14 sec)

登録データの確認

SELECT文でテーブル内の全レコードを表示してみます。

mysql> select * from DemoTable1507;

実行すると、次のような出力が得られます。

+-------+----------+
| Name  | PaperSet |
+-------+----------+
| Chris |      111 |
| David |      112 |
| Mike  |      111 |
| Bob   |      113 |
+-------+----------+
4 rows in set (0.00 sec)

GROUP_CONCAT() で結果を1行にまとめる

ここからが本題です。GROUP_CONCAT() を使うと、条件に一致する複数の行を1つの文字列として連結できます。以下のクエリでは、PaperSetが111のレコードだけをWHERE句で絞り込み、名前を降順(DESC)で並べ替えたうえで、区切り文字「:」を挟んで1行にまとめています。

mysql> select group_concat(Name order by Name desc separator ':')
    -> from DemoTable1507
    -> where PaperSet=111;

実行結果は以下のとおりです。

+-----------------------------------------------------+
| group_concat(Name order by Name desc separator ':') |
+-----------------------------------------------------+
| Mike:Chris                                        |
+-----------------------------------------------------+
1 row in set (0.00 sec)

構文のポイント解説

  • order by:連結する値の並び順を指定できます。上記の例では降順(desc)にしているため、「Mike」が先頭に表示されています。昇順にしたい場合は asc を指定するか、省略します。
  • separator:値をつなぐ区切り文字を自由に指定できます。デフォルトはカンマ「,」ですが、例のように「:」など任意の文字列に変更可能です。
  • where句との併用:GROUP_CONCAT() はWHERE句による絞り込みと組み合わせられるため、特定のグループのデータだけを1行で取得したい場合に非常に便利です。

なお、GROUP_CONCAT() の戻り値には最大長の制限(システム変数 group_concat_max_len、デフォルトは1024バイト)がある点に注意してください。大量のデータを連結する場合は、必要に応じてこの設定値を調整しておきましょう。

  1. MySQLコマンドラインでデータベースを作成する方法を初心者向けに解説

    MySQLコマンドラインでデータベースを作成する手順 この記事では、WindowsのコマンドプロンプトからMySQLに接続し、データベースを作成する一連の手順をスクリーンショット付きで解説します。初心者の方でも迷わず進められるよう、順番に見ていきましょう。 1. コマンドプロンプトを開く まず、コマンドプロンプトを起動します。キーボードのショートカット「Windows + R」キーを押すと、「ファイル名を指定して実行」ダイアログが表示されます。 2. 「CMD」と入力してOKをクリック 表示された入力欄に CMD と入力し、「OK」ボタンをクリックしてください。 3. コマンドプロンプトが

  2. MySQLで複数テーブルの結果をマージする方法|JOINを使った結合手順を解説

    MySQLで2つ以上のテーブルに分かれたデータを1つの結果としてまとめたい場合、JOIN(結合)を使うのが最もシンプルで効果的な方法です。この記事では、実際にテーブルを作成しながら、JOINによる結果のマージ手順をわかりやすく解説します。マージに使用するJOINの基本構文結果をマージするには、以下のような構文でシンプルなJOINを使用します。SELECT aliasName1.yourColumnName1, aliasName1.yourColumnName2, ... aliasName2.yourColumnName1 FROM yourTableName1 aliasN