sql >> データベース >  >> RDS >> Mysql

MySQLで複数の行を1つの列に連結する方法

    複数の行を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日間の無料トライアルを提供しています。

    1. Windows認証を使用してsqlalchemy経由でSQLServerに接続するにはどうすればよいですか?

    2. sqliteに保存されている個々の値に基づいてMPandroidChartsのバーの色を変更するにはどうすればよいですか?

    3. Oracle Data Mining(ODM)–インストールとセットアップ

    4. Oracle SQL Developerで2つのクエリを同時に実行しますか?