MySQL でのデータの再構成: Long/Tall から Wide 形式への変換
データ分析では、多くの場合、長い形式からデータを再構成する必要があります。 /トールフォーマットからワイドフォーマットへ。この変換は、複数の行と列を持つテーブルを、より少ない行とより多くの列を持つテーブルに変換します。
問題ステートメント
long/tall 形式のデータを持つ MySQL テーブルを考えてみましょう。この形式では、各行が国、キー、値を含む 1 つの観測値を表します。目標は、国ごとに 1 行、キーごとに列を含むワイド形式にデータを再形成することです。
SQL ソリューション
MySQL には組み込み機能が用意されています。この変換を実行するには、クロス集計またはピボット テーブルと呼ばれます。方法は次のとおりです:
1.キーの識別
クエリを使用して、元のテーブルから個別のキーを選択します。
SELECT DISTINCT key FROM table;
このクエリの出力は、キー要素のリストを提供します。
2.ワイド テーブルの作成
次の構造を持つ新しいテーブルを作成します。
CREATE TABLE wide_table ( country VARCHAR(255), key1 VARCHAR(255), ..., keyN VARCHAR(255), newPkey INT AUTO_INCREMENT PRIMARY KEY );
key1、...、keyN を手順 1 で取得した実際のキー名に置き換えます。 newPkey 列は、ワイド内の各行を一意に識別するために使用される自動インクリメント主キーです。表。
3.テーブル値の入力
クロス集計クエリを使用して、広いテーブルにデータを入力します。
SELECT country, MAX(IF(key='President', value, NULL)) AS President, MAX(IF(key='Currency', value, NULL)) AS Currency, ... FROM table GROUP BY country;
このクエリは、条件付き集計 (MAX および IF) を利用して、キー列に値を割り当てます。それぞれの国ごとに。同じ国の重複キーを持つ行は、MAX 関数を使用して削除されます。
入力例と出力
入力:
country | attrName | attrValue | key |
---|---|---|---|
US | President | Obama | 2 |
US | Currency | Dollar | 3 |
China | President | Hu | 4 |
China | Currency | Yuan | 5 |
出力:
country | President | Currency | newPkey |
---|---|---|---|
US | Obama | Dollar | 1 |
China | Hu | Yuan | 2 |
この例では、からの変換を示します。 MySQL クロス集計を使用して、縦長/縦長から横長の形式に変換します。
以上がMySQL で Long/Tall データを Wide フォーマットに再形成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。