MySQLでGROUP BYを使って学生ごとの点数をグループ化し、合計点数を表示する方法
はじめに
MySQLで学生ごとに点数(マーク)をグループ化し、それぞれの合計点数を求めるには、GROUP BY句とSUM()関数を組み合わせて使用します。本記事では、実際のサンプルコードと実行結果をもとに、その手順をわかりやすく解説します。
1. サンプルテーブルを作成する
まず、学生名と点数を格納するためのテーブルを作成します。
mysql> create table DemoTable1920
(
StudentName varchar(20),
StudentMarks int
);
Query OK, 0 rows affected (0.00 sec)
2. レコードを挿入する
INSERT文を使って、テーブルにいくつかのレコードを追加します。ここでは、「Chris」と「David」の2人の学生がそれぞれ複数の点数を持っているデータを想定しています。
mysql> insert into DemoTable1920 values('Chris',67);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1920 values('David',97);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1920 values('Chris',57);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1920 values('David',45);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1920 values('Chris',89);
Query OK, 1 row affected (0.00 sec)3. テーブルの内容を確認する
SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable1920;
上記のクエリを実行すると、次のような出力が得られます。
+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| Chris | 67 |
| David | 97 |
| Chris | 57 |
| David | 45 |
| Chris | 89 |
+-------------+--------------+
5 rows in set (0.00 sec)
4. 学生ごとに点数をグループ化して合計を表示する
特定の学生の点数をグループ化して合計を求めるには、GROUP BY句で学生名ごとに行をまとめ、SUM()関数で点数を合計します。as TotalMarksのようにエイリアスを指定すると、結果の列名が「TotalMarks(合計点数)」として表示され、より読みやすくなります。
mysql> select StudentName,SUM(StudentMarks) as TotalMarks from DemoTable1920
group by StudentName;
このクエリを実行すると、次のような出力が得られます。
+-------------+------------+
| StudentName | TotalMarks |
+-------------+------------+
| Chris | 213 |
| David | 142 |
+-------------+------------+
2 rows in set (0.00 sec)
まとめ
GROUP BY句で学生名ごとに行をグループ化し、SUM()関数で各グループの点数を合計することで、Chrisの合計は213点、Davidの合計は142点という結果を簡単に取得できました。この手法は、売上データの集計やアクセスログの統計など、さまざまな場面で応用できる基本的かつ重要なSQLのテクニックです。
-
MySQLでテーブル内の各レコードの出現回数をカウントし、結果を新しい列として表示する方法
MySQLのテーブル内で同じ値が何回出現するかをカウントし、その結果を新しい列として表示したい場合があります。このような集計処理には、COUNT(*)関数とGROUP BY句を組み合わせて使用します。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable1942 ( Value int ); Query OK, 0 rows affected (0.00 sec) INSERTコマンドを使って、いくつかのレコードを挿入します。 mysql> insert into DemoTable
-
MySQLでテーブルを更新し、新しい列に名前のイニシャルを表示する方法
MySQLでは、LEFT()関数とSUBSTRING_INDEX()関数を組み合わせることで、氏名からイニシャル(頭文字)だけを取り出すことができます。この記事では、実際にテーブルを作成し、既存のデータからイニシャルを生成して新しい列に格納する手順を解説します。 1. テーブルの作成 まず、氏名を保存する「full_name」列と、イニシャルを格納する「short_name」列を持つテーブルを作成しましょう。 mysql> create table demo13 -> ( -> full_name varchar(100), -> short_name varchar