ホームページ > データベース > mysql チュートリアル > MySQL でテーブルを動的にピボットする方法?

MySQL でテーブルを動的にピボットする方法?

Mary-Kate Olsen
リリース: 2025-01-25 13:27:10
オリジナル
871 人が閲覧しました

How to Dynamically Pivot Tables in MySQL?

MySQL 動的ピボット: 行を列に変換

MySQL では、行を列に変換するためにピボット テーブルが必要になる場合があります。これは、データをさまざまな方向で表現する必要がある場合に特に便利です。 MySQL は PIVOT 関数をネイティブに提供しませんが、このタスクを実行するにはいくつかの方法があります。

チャレンジ: ダイナミック ピボット テーブル

Products、Partners、Sales という 3 つのテーブルがあるとします。行としてパートナー、列として製品を含むテーブルを作成し、それぞれの組み合わせに関連付けられた販売数量を計算する必要があります。

CASE ステートメントを使用します

1 つの方法は、CASE ステートメントで集計関数を使用することです。複数の CASE ステートメントを作成すると、各製品の売上を計算し、結果をパートナー名ごとにグループ化できます。

1

2

3

4

5

6

7

8

9

10

SELECT pt.partner_name,

  COUNT(CASE WHEN pd.product_name = 'Product A' THEN 1 END) AS ProductA,

  COUNT(CASE WHEN pd.product_name = 'Product B' THEN 1 END) AS ProductB,

  COUNT(CASE WHEN pd.product_name = 'Product C' THEN 1 END) AS ProductC,

  COUNT(CASE WHEN pd.product_name = 'Product D' THEN 1 END) AS ProductD,

  COUNT(CASE WHEN pd.product_name = 'Product E' THEN 1 END) AS ProductE

FROM partners pt

LEFT JOIN sales s ON pt.part_id = s.partner_id

LEFT JOIN products pd ON s.product_id = pd.prod_id

GROUP BY pt.partner_name;

ログイン後にコピー

準備されたステートメントを使用して動的パースペクティブを実装します

製品の数が不明で動的に変化する状況では、準備されたステートメントを使用できます。 SQL クエリを動的に生成することで、利用可能な製品に基づいて列の数を調整できます。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

SET @sql = NULL;

SELECT

  GROUP_CONCAT(DISTINCT

    CONCAT(

      'COUNT(CASE WHEN Product_Name = ''',

      Product_Name,

      ''' THEN 1 END) AS ',

      REPLACE(Product_Name, ' ', '')

    )

  ) INTO @sql

FROM products;

 

SET @sql = CONCAT('SELECT pt.partner_name, ', @sql, ' FROM partners pt

LEFT JOIN sales s ON pt.part_id = s.partner_id

LEFT JOIN products pd ON s.product_id = pd.prod_id

GROUP BY pt.partner_name');

 

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

ログイン後にコピー

制限事項と注意事項

GROUP_CONCAT デフォルトのバイト制限は 1024 であることに注意してください。連結された文字列がこの制限を超える場合は、SET @@group_concat_max_len = 32000; を使用して制限を増やす必要がある場合があります。

以上がMySQL でテーブルを動的にピボットする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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