MySQLでGROUP BYとSUM()を使ってレコードをグループ化し合計値を求める方法
MySQLでは、レコードをグループ化する際に GROUP BY 句を使用し、数値の合計を計算する際に SUM() 関数を使用します。この記事では、実際にテーブルを作成し、特定のカラム(Subject)に基づいて値をグループ化して合計する手順を、具体例とともにわかりやすく解説します。
1. サンプルテーブルの作成
まず、以下の CREATE TABLE 文でテーブルを作成します。
mysql> create table DemoTable
(
Name varchar(40),
Subject varchar(40),
Marks int
);
Query OK, 0 rows affected (2.89 sec)
ここでは、学生の名前(Name)、科目(Subject)、点数(Marks)を格納するシンプルなテーブルを用意しました。
2. テーブルへのデータ挿入
続いて、INSERT コマンドを使って複数のレコードを挿入します。
mysql> insert into DemoTable values('Chris','MySQL',76);
Query OK, 1 row affected (0.32 sec)
mysql> insert into DemoTable values('Sam','MongoDB',86);
Query OK, 1 row affected (0.39 sec)
mysql> insert into DemoTable values('Mike','MySQL',98);
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable values('David','Java',93);
Query OK, 1 row affected (0.32 sec)
mysql> insert into DemoTable values('Bob','MySQL',57);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('John','MongoDB',77);
Query OK, 1 row affected (0.17 sec)
3. 挿入したレコードの確認
SELECT 文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
上記のクエリを実行すると、次のような出力が得られます。
+-------+---------+-------+ | Name | Subject | Marks | +-------+---------+-------+ | Chris | MySQL | 76 | | Sam | MongoDB | 86 | | Mike | MySQL | 98 | | David | Java | 93 | | Bob | MySQL | 57 | | John | MongoDB | 77 | +-------+---------+-------+ 6 rows in set (0.00 sec)
6件のレコードが登録されていることが確認できます。同じ科目が複数存在するため、これらを科目ごとにまとめて集計する場面は実務でもよくあります。
4. Subjectごとにグループ化して合計するクエリ
以下が、SUBJECT(科目)を基準に点数をグループ化し、合計を求めるクエリです。
mysql> select Subject,SUM(Marks) from DemoTable group by Subject;
実行結果は次のとおりです。
+---------+------------+ | Subject | SUM(Marks) | +---------+------------+ | MySQL | 231 | | MongoDB | 163 | | Java | 93 | +---------+------------+ 3 rows in set (0.00 sec)
まとめ
このように、GROUP BY 句と SUM() 関数を組み合わせることで、特定のカラムの値に基づいてレコードをグループ化し、その合計値を簡単に取得できます。今回の例では、科目ごとの点数合計(MySQL:231、MongoDB:163、Java:93)を求めることができました。売上集計やアクセス解析など、データをカテゴリ別に集計したいさまざまなシーンで応用できる基本テクニックなので、ぜひ覚えておきましょう。
-
【MySQL】特定の列の値を先頭に固定し、残りの行をランダム順で表示する方法
MySQLで行をランダムに並べ替えるには RAND() 関数を使用しますが、さらに「特定の列の値だけは必ず先頭に固定して表示したい」という場合には、ORDER BY 句と組み合わせることで実現できます。この記事では、特定の値を持つ行を常に最上位に固定しつつ、それ以外の行をランダムな順序で表示する方法を、実際のSQL例とともに解説します。1. サンプルテーブルを作成するまず、数値を格納するシンプルなテーブルを作成します。mysql> create table DemoTable1921 ( Numb
-
MySQLで最初の3件のレコードに特定の値を設定する方法
MySQLで、テーブルの最初の3件のレコードだけに特定の値を設定したい場合は、UPDATE文と組み合わせて LIMIT 3 を使用します。MySQLのUPDATE文は ORDER BY 句と LIMIT 句をサポートしているため、更新対象の行数を簡単に制御できます。ここでは、実際の手順をサンプルコードとともに解説します。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable1968 ( Id int NOT NULL AUTO_I