データ ピボットは、データ変換における一般的な操作であり、垂直レイアウトから水平レイアウトへのデータの再形成を伴います。 SQL では、これは UNPIVOT 関数や PIVOT 関数などのさまざまな手法を使用して実現できます。ただし、MySQL にはネイティブ PIVOT 関数がないため、代替方法を検討する必要があります。
MySQL で動的ピボットを行う 1 つのアプローチは、集計関数と CASE ステートメントを使用してクエリを動的に構築することです。この方法では、出力に必要なディメンションと値に基づいて SQL ステートメントを動的に構築します。
次の例は、準備されたステートメントを使用して動的ピボットを実装する方法を示しています。
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when part_type = ''', part_type, ''' then part_id end) AS part_', part_type, '_id' ) ) INTO @sql FROM parts; SET @sql = CONCAT('SELECT product_id, ', @sql, ' FROM parts GROUP BY product_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
このクエリではでは、ピボットの寸法である個別のパーツ タイプに基づいて SELECT ステートメントを動的に生成します。 CASE ステートメントを使用して、part_type に基づいて、part_id を適切なピボット列に割り当てます。生成された SQL ステートメントは、パフォーマンスを向上させるために準備されたステートメントを使用して実行されます。
出力に必要な列の数が限られていることがわかっている場合は、静的バージョンのクエリを使用することもできます。
select product_id, max(case when part_type ='A' then part_id end) as Part_A_Id, max(case when part_type ='B' then part_id end) as Part_B_Id from parts group by product_id
これらのテクニックを活用することで、MySQL に動的ピボットを実装してデータを効率的に再形成できます。
以上がMySQL で動的データ ピボットを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。