MySQL GROUP BY を使用したクエリ結果のピボット
リレーショナル データベースでは、データのピボットとは、データの視覚化を強化するために行と列を再配置することを指します。 。ここでは、GROUP BY を使用してデータを行ベースから列ベースに変換するという共通の課題に取り組みます。
Query
データをピボットするには、GROUP を使用できます。 BY 句と SUM や CASE などの条件付き集計関数。次のクエリを考えてみましょう:
<br>SELECT<br> d.data_timestamp,<br> SUM(CASE WHEN data_id = 1 THEN data_value ELSE 0 END) AS 'input_1',<br> SUM(CASE WHEN data_id = 2 THEN data_value ELSE 0 END) AS 'input_2'<br>FROM<br> data<br>GROUP BY<br> d.data_timestamp<br>ORDER BY<br> d.data_timestamp ASC; <br>
説明
代替アプローチ
MySQL は、データをピボットするための代替方法も提供します。これらのアプローチには、IF() 関数または複数レベルの結合の使用が含まれます。
IF() Function
<br>SELECT<br> d. data_timestamp,<br> SUM(IF(data_id = 1, data_value, 0)) AS 'input_1',<br> SUM(IF(data_id = 2, data_value, 0)) AS 'input_2'<br>FROM<br> data<br>GROUP BY<br> d.data_timestamp<br>ORDER BY<br> d.data_timestamp ASC;<br>
複数レベルの結合
<br>SELECT<br> d.data_timestamp,<br> d01.data_value AS 'input_1',<br> d02.data_value AS 'input_2'<br>FROM<br> (</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">SELECT DISTINCT d.data_timestamp FROM data
) AS d
LEFT JOIN
データ AS d01
ON
d01.data_timestamp = d.data_timestamp AND d01.data_id = 1
LEFT JOIN
データ AS d02
ON
d02.data_timestamp = d.data_timestamp AND d02.data_id = 2
ORDER BY
d.data_timestamp ASC;
結論
MySQL の GROUP BY 句は、クエリ結果をピボットするための強力なメカニズムを提供します。 CASE、IF()、および複数レベルの結合手法により、データの処理とさまざまなデータ構造への対応に柔軟性が提供されます。最適なアプローチの選択は、特定の要件とパフォーマンスの考慮事項によって異なります。
以上がGROUP BY を使用して MySQL でデータをピボットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。