PIVOT または GROUP BY を使用して MySQL テーブルの行を列に変換しますデータ変換手法である
PIVOTING は、行データを列に再配置します。この場合の目標は、タイムスタンプなどの特定の列でデータをグループ化し、各データ値を個別の列として表示することです。
従来の PIVOT 構文の代わりにMySQL では広くサポートされていませんが、SUM() 関数を CASE ステートメントと組み合わせて使用すると、目的の結果を達成できます。 result.
<code class="sql">SELECT d.data_timestamp , SUM(CASE WHEN data_id = 1 THEN data_value ELSE 0 END) AS 'input_1' , SUM(CASE WHEN data_id = 2 THEN data_value ELSE 0 END) AS 'input_2' ... , SUM(CASE WHEN data_id = 20 THEN data_value ELSE 0 END) AS 'input_20' FROM data GROUP BY data_timestamp ORDER BY data_timestamp ASC</code>
また、SUM() 関数内で IF ステートメントを使用して、同じ結果を得ることができます。
<code class="sql">SELECT d.data_timestamp , SUM(IF(data_id = 1, data_value, 0)) AS 'input_1' , SUM(IF(data_id = 2, data_value, 0)) AS 'input_2' ... , SUM(IF(data_id = 20, data_value, 0)) AS 'input_20' FROM data GROUP BY data_timestamp ORDER BY data_timestamp ASC</code>
もう 1 つのアプローチは、複数の JOIN ステートメントを使用して目的のステートメントを作成することです。
<code class="sql">SELECT d.data_timestamp , d01.data_value AS 'input_1' , d02.data_value AS 'input_2' ... , d20.data_value AS 'input_20' FROM (SELECT DISTINCT d.data_timestamp FROM data ) AS d LEFT JOIN data AS d01 ON d01.data_timestamp = d.data_timestamp AND d01.data_id = 1 LEFT JOIN data AS d02 ON d02.data_timestamp = d.data_timestamp AND d02.data_id = 2 ... --- 20 JOINs LEFT JOIN data AS d20 ON d20.data_timestamp = d.data_timestamp AND d20.data_id = 20 ORDER BY d.data_timestamp ASC</code>
これらの手法を利用すると、GROUP BY を使用して MySQL でクエリ結果を簡単にピボットできます。
以上がGROUP BY を使用して MySQL でクエリ結果をピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。