ホームページ > データベース > mysql チュートリアル > 準備されたステートメントを使用して MySQL で動的ピボットを実行する方法?

準備されたステートメントを使用して MySQL で動的ピボットを実行する方法?

Mary-Kate Olsen
リリース: 2025-01-06 07:31:41
オリジナル
319 人が閲覧しました

How to Perform Dynamic Pivoting in MySQL Using Prepared Statements?

MySQL の動的ピボット

MySQL では、テーブルに正規化された形式のデータが含まれることが多く、より多くのユーザーがデータを取得するには複雑なクエリが必要になります。フレンドリーなフォーマット。このような変換の 1 つは、列が行に変換されるピボットです。

製品部品 (part_id) を製品タイプ (part_type) および製品 ID (product_id) に関連付ける、「Parts」のようなテーブルについて考えてみましょう。このテーブルをピボットして、さまざまなパーツ タイプの各製品のパーツ ID を示す新しいテーブルを作成したいと考えています。

MySQL には専用の PIVOT 関数がないため、代替手法を使用する必要があります。解決策の 1 つは、集計関数と CASE ステートメントを使用することです。動的ピボットの場合、プリペアド ステートメントを活用できます。

動的ピボット クエリ

次のクエリは、動的 SQL を使用して「Parts」テーブルをピボットします:

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;
ログイン後にコピー

このクエリは、テーブル内に存在する個別のパーツ タイプに基づいて SQL ステートメントを動的に生成し、実行します。パフォーマンスを向上させるために準備されたステートメントを使用します。

結果の例

結果のテーブルは次の形式になります:

product_id      part_A_id      part_B_id
----------------------------------------
1               1              2
2               3              4
3               5              6
ログイン後にコピー

静的ピボット クエリ

限られた数のパーツ タイプの場合、静的ピボット クエリを使用できます:

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 で動的ピボットを実行する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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