ホームページ  >  記事  >  データベース  >  「CASE」または「IF」ステートメントを使用して MySQL でデータをピボットする方法?

「CASE」または「IF」ステートメントを使用して MySQL でデータをピボットする方法?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-09 10:05:02212ブラウズ

How to Pivot Data in MySQL Using `CASE` or `IF` Statements?

GROUP BY を使用したピボット形式でのデータの表示

ここでのタスクには、個々のデータ ポイントを表す行を含むリレーショナル データベース テーブルを、データがタイムスタンプに基づいて列に編成され、値が特定の識別子によってグループ化されるピボット形式。

このピボット構造を実現するには、MySQL で CASE ステートメントを使用できます。このステートメントを使用すると、さまざまな条件に基づいて値を条件付きで割り当てることができます:

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

このクエリでは、SUM 関数を使用して、個別の data_timestamp ごとに data_value を集計します。 CASE ステートメントは、data_id が特定の値 (1、2、または 20 など) に一致するかどうかをチェックします。一致する場合、対応する data_value がそれぞれの列 (input_1、input_2、input_20 など) の合計に含まれます。一致するものが見つからない場合、計算にはゼロが使用されます。これにより、data_timestamp が行識別子であるテーブルが作成され、各 data_id には、対応する集計された data_value を表示する専用の列があります。

同じ目的で CASE の代わりに IF ステートメントを使用することもできます。

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

CASE アプローチと IF アプローチの両方を使用すると、必要な列を動的に生成し、data_id と data_timestamp に基づいて値を集計し、最終的に目的のピボット形式でデータを表示できます。

以上が「CASE」または「IF」ステートメントを使用して MySQL でデータをピボットする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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