Membentuk Semula Data dalam MySQL: Menukar Format Panjang/Tinggi kepada Lebar
Dalam analisis data, selalunya perlu untuk membentuk semula data dari panjang / format tinggi kepada format yang luas. Transformasi ini menukar jadual dengan berbilang baris dan lajur kepada jadual dengan lebih sedikit baris dan lebih banyak lajur.
Pernyataan Masalah
Pertimbangkan jadual MySQL dengan data dalam panjang/tinggi format, di mana setiap baris mewakili satu pemerhatian dengan negara, kunci dan nilai. Matlamatnya adalah untuk membentuk semula data ke dalam format yang luas, dengan satu baris untuk setiap negara dan lajur untuk setiap kunci.
SQL Solution
MySQL menyediakan ciri terbina dalam dipanggil tab silang atau jadual pangsi untuk mencapai transformasi ini. Begini caranya:
1. Mengenalpasti Kekunci
Gunakan pertanyaan untuk memilih kunci yang berbeza daripada jadual asal:
SELECT DISTINCT key FROM table;
Output pertanyaan ini akan menyediakan senarai elemen utama.
2. Mencipta Jadual Lebar
Buat jadual baharu dengan struktur berikut:
CREATE TABLE wide_table ( country VARCHAR(255), key1 VARCHAR(255), ..., keyN VARCHAR(255), newPkey INT AUTO_INCREMENT PRIMARY KEY );
Ganti kekunci1, ..., kekunciN dengan nama kunci sebenar yang diperoleh dalam langkah 1. lajur newPkey ialah kunci utama penambahan automatik yang digunakan untuk mengenal pasti secara unik setiap baris dalam jadual lebar.
3. Mengisi Nilai Jadual
Gunakan pertanyaan silang tab untuk mengisi jadual lebar:
SELECT country, MAX(IF(key='President', value, NULL)) AS President, MAX(IF(key='Currency', value, NULL)) AS Currency, ... FROM table GROUP BY country;
Pertanyaan ini menggunakan pengagregatan bersyarat (MAX dan IF) untuk menetapkan nilai pada lajur utama bagi setiap negara. Baris dengan kekunci pendua untuk negara yang sama dihapuskan dengan menggunakan fungsi MAX.
Contoh Input dan Output
Input:
country | attrName | attrValue | key |
---|---|---|---|
US | President | Obama | 2 |
US | Currency | Dollar | 3 |
China | President | Hu | 4 |
China | Currency | Yuan | 5 |
Output:
country | President | Currency | newPkey |
---|---|---|---|
US | Obama | Dollar | 1 |
China | Hu | Yuan | 2 |
Contoh ini menunjukkan transformasi daripada format panjang/tinggi hingga lebar menggunakan tab silang MySQL.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membentuk Semula Data Panjang/Tinggi kepada Format Lebar dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!