ホームページ >データベース >mysql チュートリアル >MySQL クエリで行を列に動的に変換するにはどうすればよいですか?
MySQL クエリで行を列に動的に変換する
多くのデータ操作では、行を列に変換し、行数に基づいて列数を動的に調整する必要があります。 MySQL はこのピボット操作を直接サポートしていませんが、それをシミュレートする手法があります。
1 つの方法は、GROUP BY
関数と MAX
関数を使用することです。特定の列 (ID など) に基づいて行をグループ化し、MAX
関数を使用してそのグループ内の各注文の最大値を取得することで、注文ごとに列を作成できます。たとえば、次のクエリはテーブル A の行を結果テーブルの列に変換します。
<code class="language-sql">SELECT ID, MAX(IF(`order` = 1, data, NULL)) data1, MAX(IF(`order` = 2, data, NULL)) data2 FROM TableA GROUP BY ID</code>注文に複数の値がある場合は、動的 SQL の方が適している可能性があります。これにより、クエリ文字列を動的に作成でき、列の数が注文の数と一致することが保証されます。以下に例を示します:
<code class="language-sql">SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(`order` = ', `order`, ',data,NULL)) AS data', `order`) ) INTO @sql FROM TableName; SET @sql = CONCAT('SELECT ID, ', @sql, ' FROM TableName GROUP BY ID'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;</code>どちらの方法でも、目的の結果テーブルが生成されます:
<code>╔════╦═══════╦═══════╗ ║ ID ║ DATA1 ║ DATA2 ║ ╠════╬═══════╬═══════╣ ║ 1 ║ P ║ S ║ ║ 2 ║ R ║ Q ║ ╚════╩═══════╩═══════╝</code>これらのメソッドは、MySQL クエリの行を列に動的に変換する効率的な方法を提供し、結果が基になるデータの変更に確実に適応するようにします。
以上がMySQL クエリで行を列に動的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。