複数の行を1つの列に結合する必要がある場合があります。 GROUP_CONCAT関数を使用して、MySQLで複数の行を1つの列に連結する方法は次のとおりです。また、これを使用して行を文字列に連結したり、MySQLで複数の行データを単一の行で取得したりすることもできます。
MySQLで複数の行を1つの列に連結する方法
MySQLで複数の行を1つの列に連結する手順は次のとおりです。
次のテーブルsales(sales_rep、sale)があるとします
mysql> create table sales(sales_rep varchar(255),sale int);
mysql> insert into sales(sales_rep, sale)
values('Albert',10),('Bob',23),
('Chris',20),('Dave',35);
mysql> select * from sales;
+-----------+------+
| sales_rep | sale |
+-----------+------+
| Albert | 10 |
| Bob | 23 |
| Chris | 20 |
| Dave | 35 |
+-----------+------+
ボーナスリード:MySQLで現在の合計を計算する方法
次のクエリで、売上が10を超えるすべての営業担当者を報告するとします。
mysql> select sales_rep from sales where sale>10;
次の出力が得られます
+-----------+ | sales_rep | +-----------+ | Bob | | Chris | | Dave | +-----------+
ただし、sales_repの名前を1行に表示する必要があります。
Bob, Chris, Dave
この場合、GROUP_CONCAT関数を使用して、複数の行を1つの列に連結します。
mysql> select group_concat(sales_rep) from sales2 where sale>10; +-------------------------+ | group_concat(sales_rep) | +-------------------------+ | Bob,Chris,Dave | +-------------------------+
GROUP_CONCATは、null以外のすべての値をグループに連結し、それらを単一の文字列として返します。
重複を避けたい場合は、クエリにDISTINCTを追加することもできます。次の表があるとします。
mysql> select * from sales3; +---------+------------+------+ | product | order_date | sale | +---------+------------+------+ | A | 2020-01-01 | 20 | | B | 2020-01-02 | 25 | | B | 2020-01-03 | 15 | | A | 2020-01-04 | 30 | | A | 2020-01-05 | 20 | +---------+------------+------+
上記の表のproduct列 重複する値が含まれています。そのため、DISTINCTキーワードを使用して、一意の値のみを選択します。
mysql> select group_concat(distinct product) from sales3 where sale>10; +--------------------------------+ | group_concat(distinct product) | +--------------------------------+ | A,B | +--------------------------------+
ボーナスリード:MySQLに合計行を追加する方法
GROUP BY関数を使用して、各グループの行の値を連結することもできます。これが例です。次の表があるとします。
mysql> create table sales_reps(product varchar(255),sales_rep varchar(255));
mysql> insert into sales_reps(product, sales_rep)
values('A','Albert'),('A','Bob'),('A','Chris'),
('B','Dave'),('B','Edgar'),('B','Finch');
mysql> select * from sales_reps;
+---------+-----------+
| product | sales_rep |
+---------+-----------+
| A | Albert |
| A | Bob |
| A | Chris |
| B | Dave |
| B | Edgar |
| B | Finch |
+---------+-----------+
これは、GROUPBY句を使用して各製品の担当者名を連結するクエリです。
mysql> select product, group_concat(sales_rep) from sales_reps group by product; +---------+-------------------------+ | product | group_concat(sales_rep) | +---------+-------------------------+ | A | Albert,Bob,Chris | | B | Dave,Edgar,Finch | +---------+-------------------------+
複数の行を1つの列に連結した後、レポートツールを使用して結果をテーブルにプロットし、チームと共有できます。これは、Ubiqを使用して作成されたテーブルの例です。
ちなみに、MySQLデータベースからチャート、ダッシュボード、レポートを作成したい場合は、Ubiqを試すことができます。 14日間の無料トライアルを提供しています。