ピボットテーブルを使用すると、データの分析と有用な傾向の取得が簡単になります。ただし、ピボットテーブルクエリを頻繁に使用するには、それらを自動化する必要がある場合があります。 MySQLにはピボットテーブルを作成する機能がないため、MySQLでピボットテーブルを自動化するSQLクエリを作成する必要があります。それでは、MySQLでピボットテーブルクエリを自動化する方法を見てみましょう
MySQLでピボットテーブルクエリを自動化する方法
MySQLでピボットテーブルクエリを自動化する手順は次のとおりです。次の表があるとします
CREATE TABLE Meeting ( ID INT, Meeting_id INT, field_key VARCHAR(100), field_value VARCHAR(100) ); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (1, 1,'first_name' , 'Alec'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (2, 1,'last_name' , 'Jones'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (3, 1,'occupation' , 'engineer'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (4,2,'first_name' , 'John'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (5,2,'last_name' , 'Doe'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (6,2,'occupation' , 'engineer'); +------+------------+------------+-------------+ | ID | Meeting_id | field_key | field_value | +------+------------+------------+-------------+ | 1 | 1 | first_name | Alec | | 2 | 1 | last_name | Jones | | 3 | 1 | occupation | engineer | | 4 | 2 | first_name | John | | 5 | 2 | last_name | Doe | | 6 | 2 | occupation | engineer | +------+------------+------------+-------------+
試験でテーブルをピボットしたいとします。 以下に示すように、meeting_idごとに1行、field_keyごとに1列を作成するように列を作成します。
+------------+-------------+-------------+-------------+ | Meeting_id | first_name | last_name | occupation | +------------+-------------+-------------+-------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+-------------+-------------+-------------+
ピボットテーブルクエリの自動化
作成する列の数がすでにわかっている場合は、CASEステートメントを使用してピボットテーブルクエリを作成し、ピボットテーブルを作成できます。
ただし、多くの場合、ピボットテーブルに作成する必要のある列がわかりません。このような場合、次のクエリを使用してピボットテーブルを動的に作成できます。
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when exam = ''', exam, ''' then field_value end) ', field_key ) ) INTO @sql FROM Meeting; SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' FROM Meeting GROUP BY Meeting_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
上記のステートメントで、GROUP_CONCATを使用すると、field_key値を複数の行から単一の文字列に連結できます。上記のクエリでは、GROUP_CONCATを使用して、field_key列の一意の値に基づいてCASEステートメントを動的に作成し、@ sql変数に格納します。これを使用して、selectクエリを作成します。したがって、MySQLでピボットテーブルクエリを自動化するのに役立ちます
+------------+------------+-----------+------------+ | Meeting_id | first_name | last_name | occupation | +------------+------------+-----------+------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+------------+-----------+------------+
MySQLでピボットテーブルクエリを自動化する方法がわかったので、WHERE句またはJOINSを追加して、要件に応じてピボットテーブルクエリをカスタマイズできます。
選択した行の値のみを列としてピボットする場合は、最初のselectGROUP_CONCATステートメントにWHERE句を追加できます。
SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when field_key = ''', field_key, ''' then field_value end) ', field_key ) ) INTO @sql FROM Meeting WHERE <condition>;
最終的なピボットテーブルの行をフィルタリングする場合は、SETステートメントにWHERE句を追加できます。
SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' FROM Meeting WHERE <condition> GROUP BY Meeting_id');
同様に、MySQLで行を列に動的に転置しながら、SQLクエリにJOINSを適用することもできます。
レポートツールを使用して、ピボットテーブルクエリを自動化できます。これは、Ubiqを使用して作成された自動ピボットテーブルの例です。
ドラッグアンドドロップするだけでUbiqでピボットテーブルを作成できることをご存知ですか?
MySQLデータベースからピボットテーブル、チャート、ダッシュボード、レポートを作成する場合は、Ubiqを試すことができます。 14日間の無料トライアルを提供しています。