ピボットテーブルはデータ分析に役立ち、行の値を列として表示して、洞察を簡単に得ることができます。ただし、MySQLでピボットテーブルを作成する関数はありません。したがって、MySQLでピボットテーブルを作成するには、SQLクエリを作成する必要があります。幸い、MySQLでピボットテーブルを作成する方法はたくさんあります。それぞれを簡単に見てみましょう。
MySQLでピボットテーブルを作成する方法
MySQLでピボットテーブルを作成する手順は次のとおりです。次の表があるとします
CREATE TABLE exams (
id int(11) NOT NULL auto_increment,
name varchar(15),
exam int,
score int,
PRIMARY KEY (id)
);
insert into exams (name,exam,score) values ('Bob',1,70);
insert into exams (name,exam,score) values ('Bob',2,77);
insert into exams (name,exam,score) values ('Bob',3,71);
insert into exams (name,exam,score) values ('Bob',4,70);
insert into exams (name,exam,score) values ('Sue',1,89);
insert into exams (name,exam,score) values ('Sue',2,87);
insert into exams (name,exam,score) values ('Sue',3,88);
insert into exams (name,exam,score) values ('Sue',4,89);
mysql> select * from exams;
+------+------+------+-------+
| id | name | exam | score |
+------+------+------+-------+
| 1 | Bob | 1 | 70 |
| 2 | Bob | 2 | 77 |
| 3 | Bob | 3 | 71 |
| 4 | Bob | 4 | 70 |
| 5 | Sue | 1 | 89 |
| 6 | Sue | 2 | 87 |
| 7 | Sue | 3 | 88 |
| 8 | Sue | 4 | 89 |
+------+------+------+-------+
試験でテーブルをピボットしたいとします。 以下に示すように、各学生に1行、各試験に1列を作成するように列を作成します。
+--------+-----------+-----------+-----------+------------+ | name | exam1 | exam2 | exam3 | exam4 | +--------+-----------+-----------+-----------+------------+ | Bob | 70 | 77 | 71 | 70 | | Sue | 89 | 87 | 88 | 89 | +--------+-----------+-----------+-----------+------------+
IFまたはCASEステートメントを使用してMySQLでピボットテーブルを作成できます。
ボーナスリード:MySQLで中央値を計算する方法
IFステートメントを使用してMySQLでピボットテーブルを作成する
これが、IFステートメントを使用して行を列に転置するSQLクエリです。
SELECT name, sum(IF(exam=1, score, NULL)) AS exam1, sum(IF(exam=2, score, NULL)) AS exam2, sum(IF(exam=3, score, NULL)) AS exam3, sum(IF(exam=4, score, NULL)) AS exam4 FROM exams GROUP BY name; +--------+-----------+-----------+-----------+------------+ | name | exam1 | exam2 | exam3 | exam4 | +--------+-----------+-----------+-----------+------------+ | Bob | 70 | 77 | 71 | 70 | | Sue | 89 | 87 | 88 | 89 | +--------+-----------+-----------+-----------+------------+
上記のクエリでは、グループ化する必要があります 名前 学生ごとに1行が必要なので、列。また、作成する必要のある列ごとに1つの条件、つまり、試験ごとに1つの条件を提供する必要があります
CASEステートメントを使用してMySQLでピボットテーブルを作成する
CASEステートメントを使用して行を列に変換するSQLクエリは次のとおりです。
SELECT name, sum(CASE WHEN exam=1 THEN score ELSE NULL END) AS exam1, sum(CASE WHEN exam=2 THEN score ELSE NULL END) AS exam2, sum(CASE WHEN exam=3 THEN score ELSE NULL END) AS exam3, sum(CASE WHEN exam=4 THEN score ELSE NULL END) AS exam4 FROM exams GROUP BY name; +--------+-----------+-----------+-----------+------------+ | name | exam1 | exam2 | exam3 | exam4 | +--------+-----------+-----------+-----------+------------+ | Bob | 70 | 77 | 71 | 70 | | Sue | 89 | 87 | 88 | 89 | +--------+-----------+-----------+-----------+------------+
上記のクエリは、上記のIF条件を使用するクエリと同様に機能します。データをピボットする列、つまり nameでグループ化する必要があります。 。また、試験ごとに個別の列を作成するため、試験番号ごとに1つのCASEステートメントを定義する必要があります。
ピボットテーブルで試験のスコアを組み合わせることもできます。たとえば、exam1とexam2のスコアを合計して同じ列に表示する場合は、次のクエリを使用できます。
SELECT name, sum(CASE WHEN exam=1 or exam=2 THEN score ELSE NULL END) AS exam12, sum(CASE WHEN exam=3 THEN score ELSE NULL END) AS exam3, sum(CASE WHEN exam=4 THEN score ELSE NULL END) AS exam4 FROM exams GROUP BY name; +--------+------------+-----------+-----------+------------+ | name | exam12 | exam2 | exam3 | exam4 | +--------+------------+-----------+-----------+------------+ | Bob | 147 | 77 | 71 | 70 | | Sue | 176 | 87 | 88 | 89 | +--------+------------+-----------+-----------+------------+
上記の表では、1番目のCASEステートメントの条件を変更し、2番目のCASEステートメントを削除するだけで、試験1と試験2のスコアが追加され、1列のexam12に表示されています。
MySQLでピボットテーブルを作成するための要件に従って、上記のクエリをカスタマイズできます。レポートツールを使用して、結果をテーブルにプロットすることもできます。 Ubiqを使用して作成されたテーブルの例を次に示します。
ドラッグアンドドロップするだけでUbiqでピボットテーブルを作成できることをご存知ですか?
MySQLデータベースからピボットテーブル、チャート、ダッシュボードを作成する場合は、Ubiqを試すことができます。 14日間の無料トライアルを提供しています。