GROUP BY を使用して MySQL でデータをピボットするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-08 13:48:02
オリジナル
794 人が閲覧しました

How can you use GROUP BY to Pivot Data in MySQL?

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>

説明

  • クエリは、データ テーブルから一意の data_timestamp 値を取得し、結果を data_timestamp ごとにグループ化します。
  • 各グループ内で、対応する data_id の data_value の合計を計算します (例: data_id = 1 の input_1)。
  • SUM() 関数は、NULL 値のデフォルトを 0 にすることで欠損値を処理します。
  • クエリの出力は列形式で表示され、各 data_timestamp が指定された data_id の data_value の合計に関連付けられます。

代替アプローチ

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 サイトの他の関連記事を参照してください。

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