ホームページ >データベース >mysql チュートリアル >GROUP BY を使用して MySQL でクエリ結果をピボットする方法

GROUP BY を使用して MySQL でクエリ結果をピボットする方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-15 10:46:02874ブラウズ

How to Pivot Query Results in MySQL Using GROUP BY?

GROUP BY を使用した MySQL PIVOTING クエリ結果

目的

PIVOT または GROUP BY を使用して MySQL テーブルの行を列に変換しますデータ変換手法である

背景

PIVOTING は、行データを列に再配置します。この場合の目標は、タイムスタンプなどの特定の列でデータをグループ化し、各データ値を個別の列として表示することです。

CASE ステートメントの使用

従来の 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>

IF ステートメントの使用

また、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>

複数の使用JOIN ステートメント

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。