ホームページ > データベース > mysql チュートリアル > PIVOT を使用して MySQL で動的クロス集計クエリを実行する方法

PIVOT を使用して MySQL で動的クロス集計クエリを実行する方法

Susan Sarandon
リリース: 2025-01-06 09:30:41
オリジナル
652 人が閲覧しました

How to Perform Dynamic Crosstab Queries in MySQL Using PIVOT?

MySQL PIVOT/CROSSTAB クエリ

問題ステートメント:

さまざまな属性のユーザー入力を表すデータを含むテーブルをクロス集計に変換する必要がありますこの形式では、各列ヘッダーが属性を表し、各行にその属性に対応するユーザー入力値が含まれます。さらに、customer_attribute 列の値は、静的ラベルではなく列ヘッダーとして使用する必要があります。

クエリ 1: データをクロス集計形式に変換する

目的のクロス集計形式を実現するには、次のような PIVOT クエリ:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE node_id when ',
      node_id,
      ' then entered_value else NULL END) AS user_input',
      node_id
    )
  ) INTO @sql
FROM trn_user_log;


SET @sql = CONCAT('SELECT app_id, transaction_id, mobile_no, ', @sql, ' 
                  FROM trn_user_log 
                  GROUP BY app_id, transaction_id, mobile_no');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
ログイン後にコピー

このクエリは、PIVOT 演算子を使用して行を列に変換します。 app_id、transaction_id、mobile_no 列によるグループ化。

クエリ 2: カスタム列ヘッダーの使用

customer_attribute 列の値を列ヘッダーとして使用するには、上記のクエリを少し変更します。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE node_id when ',
      node_id,
      ' then entered_value else NULL END) AS ',
      customer_attribute
    )
  ) INTO @sql
FROM trn_user_log;

SET @sql = CONCAT('SELECT app_id, transaction_id, mobile_no, ', @sql, ' 
                  FROM trn_user_log 
                  GROUP BY app_id, transaction_id, mobile_no');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
ログイン後にコピー

この改訂されたクエリは、静的な列ヘッダー (user_input1、

注:

  • これらのクエリで使用されるプリペアド ステートメントは、動的な列の作成を保証し、未知の数の customer_attribute 値を処理する際の潜在的な構文エラーを回避します。
  • 最初のクエリで使用された NAME_CONST 関数は、定数値が必要なため、この場合には適用されません。 2 番目の引数として使用しますが、これは動的列生成では実現できません。

以上がPIVOT を使用して MySQL で動的クロス集計クエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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