さまざまな属性のユーザー入力を表すデータを含むテーブルをクロス集計に変換する必要がありますこの形式では、各列ヘッダーが属性を表し、各行にその属性に対応するユーザー入力値が含まれます。さらに、customer_attribute 列の値は、静的ラベルではなく列ヘッダーとして使用する必要があります。
目的のクロス集計形式を実現するには、次のような 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 列によるグループ化。
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、
以上がPIVOT を使用して MySQL で動的クロス集計クエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。