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

複数行の文字列を1行に結合し、対応するIDの合計も表示するMySQLクエリの書き方

GROUP_CONCAT()とSUM()を組み合わせた集計方法

複数行に分かれた文字列を1つの行にまとめて結合し、さらにIDの合計値を別の列として同時に表示したい場合は、GROUP_CONCAT()関数とSUM()関数を組み合わせることで実現できます。ここでは、実際にテーブルを作成し、動作を確認する手順を見ていきましょう。

1. サンプルテーブルの作成

まず、学生IDと学生名を持つテーブルを作成します。

mysql> create table DemoTable1960
    (
    StudentId int,
    StudentName varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

2. レコードの挿入

次に、INSERT文を使ってテーブルにレコードを追加していきます。

mysql> insert into DemoTable1960 values(100,'Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1960 values(101,'Bob');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1960 values(102,'David');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1960 values(103,'Mike');
Query OK, 1 row affected (0.00 sec)

3. 登録されたレコードの確認

SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。

mysql> select * from DemoTable1960;

このクエリを実行すると、次のような出力が得られます。

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|       100 | Chris       |
|       101 | Bob         |
|       102 | David       |
|       103 | Mike        |
+-----------+-------------+
4 rows in set (0.00 sec)

4. 文字列の結合とID合計を同時に取得するクエリ

それでは本題です。GROUP_CONCAT()で学生名を区切り文字「.」付きで1行に連結し、SUM()でStudentIdの合計を求めるクエリがこちらです。

mysql> select sum(StudentId),group_concat(StudentName separator '.') as ListOfStudent from DemoTable1960;

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

+----------------+----------------------+
| sum(StudentId) | ListOfStudent        |
+----------------+----------------------+
|            406 | Chris.Bob.David.Mike |
+----------------+----------------------+
1 row in set (0.00 sec)

ポイントの解説

  • GROUP_CONCAT(): グループ内の複数行の値を1つの文字列に連結します。「separator」句を使うことで、値の間に入れる区切り文字を自由に指定できます(デフォルトはカンマ「,」)。
  • SUM(): 指定した数値列の合計値を計算します。ここではStudentIdの合計である「406」が返されています。

このように、GROUP_CONCAT()とSUM()を同じSELECT文で併用すれば、文字列の集約と数値の集計を1回のクエリで効率的に行うことができます。

  1. MySQLで行の値を合計して結果を並べ替えるクエリの書き方

    MySQLで行の値を合計し、結果を並べ替える方法テーブル内の同じキーを持つ行の値を合計し、その結果を並べ替えたい場合には、GROUP BY句とORDER BY句を組み合わせて使用します。GROUP BYで対象の列ごとにデータをグループ化し、SUM関数で合計値を算出した後、ORDER BYで並べ替えるという流れになります。ここでは、生徒名と点数が登録されたテーブルを例に、生徒ごとの合計点を降順で取得する手順を解説します。1. サンプルテーブルを作成するまず、CREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1499 &nb

  2. 【MySQL】DATE_FORMAT()で日付から月の列を作成し、重複する月の金額を合計して表示する方法

    はじめに日付データから月ごとの列を作成し、同じ月(重複する日付)が存在する場合には対応する数値列の合計を表示したいケースはよくあります。MySQLではDATE_FORMAT()関数とGROUP BY句を組み合わせることで、このような月別集計を簡単に実現できます。本記事では、具体的な手順をサンプルコード付きで解説します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable -> ( -> PurchaseDate date, -> Amount int -> );Query OK