ホームページ > データベース > mysql チュートリアル > MySQL で動的データ ピボットを実行するにはどうすればよいですか?

MySQL で動的データ ピボットを実行するにはどうすればよいですか?

DDD
リリース: 2025-01-06 07:35:43
オリジナル
897 人が閲覧しました

How to Perform Dynamic Data Pivoting in MySQL?

MySQL でのデータの動的ピボット

データ ピボットは、データ変換における一般的な操作であり、垂直レイアウトから水平レイアウトへのデータの再形成を伴います。 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート