複数行の文字列を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回のクエリで効率的に行うことができます。
-
MySQLで行の値を合計して結果を並べ替えるクエリの書き方
MySQLで行の値を合計し、結果を並べ替える方法テーブル内の同じキーを持つ行の値を合計し、その結果を並べ替えたい場合には、GROUP BY句とORDER BY句を組み合わせて使用します。GROUP BYで対象の列ごとにデータをグループ化し、SUM関数で合計値を算出した後、ORDER BYで並べ替えるという流れになります。ここでは、生徒名と点数が登録されたテーブルを例に、生徒ごとの合計点を降順で取得する手順を解説します。1. サンプルテーブルを作成するまず、CREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1499 &nb
-
【MySQL】DATE_FORMAT()で日付から月の列を作成し、重複する月の金額を合計して表示する方法
はじめに日付データから月ごとの列を作成し、同じ月(重複する日付)が存在する場合には対応する数値列の合計を表示したいケースはよくあります。MySQLではDATE_FORMAT()関数とGROUP BY句を組み合わせることで、このような月別集計を簡単に実現できます。本記事では、具体的な手順をサンプルコード付きで解説します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable -> ( -> PurchaseDate date, -> Amount int -> );Query OK