Dalam SQL, data selalunya boleh distrukturkan dengan baris yang mewakili rekod dan lajur individu yang mengandungi atribut khusus. Walau bagaimanapun, terdapat situasi di mana ia menjadi perlu untuk mengubah baris menjadi lajur, satu proses yang dikenali sebagai transposisi. Dalam artikel ini, kami akan meneroka penyelesaian untuk menukar baris sebagai lajur menggunakan PostgreSQL.
Pertimbangkan senario berikut: anda mempunyai dua jadual, satu dengan jawapan kepada soalan dan satu lagi mengandungi soalan sebenar. Matlamatnya adalah untuk menukar data supaya setiap pengguna mempunyai baris yang mewakili respons mereka kepada semua soalan.
responses: user_id | question_id | body ---------------------------- 1 | 1 | Yes 2 | 1 | Yes 1 | 2 | Yes 2 | 2 | No 1 | 3 | No 2 | 3 | No questions: id | body ------------------------- 1 | Do you like apples? 2 | Do you like oranges? 3 | Do you like carrots?
Output yang diingini akan kelihatan seperti ini:
user_id | Do you like apples? | Do you like oranges? | Do you like carrots? --------------------------------------------------------------------------- 1 | Yes | Yes | No 2 | Yes | No | No
Untuk menukar data, kami akan menggunakan gabungan JOIN dan MAX() dengan ungkapan CASE. Pertanyaannya adalah seperti berikut:
SELECT r.user_id, MAX(CASE WHEN r.question_id = 1 THEN r.body ELSE NULL END) AS "Do you like apples?", MAX(CASE WHEN r.question_id = 2 THEN r.body ELSE NULL END) AS "Do you like oranges?", MAX(CASE WHEN r.question_id = 3 THEN r.body ELSE NULL END) AS "Do you like carrots?" FROM RESPONSES r JOIN QUESTIONS q ON q.id = r.question_id GROUP BY r.user_id
1. JOIN: Operasi JOIN mewujudkan hubungan antara jadual RESPONSES dan QUESTIONS berdasarkan lajur question_id biasa. Ini membolehkan kami menggandingkan jawapan dengan soalan yang sepadan.
2. MAX() dengan CASE: Fungsi MAX() digunakan untuk mengagregatkan lajur isi, hanya mengambil kira nilai maksimum untuk setiap pengguna dan gabungan soalan. Ungkapan CASE dalam MAX() bertindak sebagai pernyataan bersyarat yang mendapatkan semula nilai kandungan untuk soalan tertentu atau NULL jika syarat tidak dipenuhi.
3. KUMPULAN OLEH: Klausa GROUP BY mengumpulkan hasil mengikut lajur user_id. Ini memastikan bahawa setiap baris dalam output mewakili pengguna yang unik.
Pertanyaan SQL yang disediakan secara berkesan menukarkan baris ke dalam lajur, membolehkan anda mengekstrak respons pengguna dengan mudah untuk satu set soalan. Teknik ini biasanya dirujuk sebagai data berputar dan sering digunakan dalam analisis dan pelaporan data. Dengan menggunakan binaan JOIN, MAX(), dan CASE bersama GROUP BY, anda boleh mencapai transformasi data yang berkuasa dalam SQL.
Atas ialah kandungan terperinci Bagaimana untuk Memindahkan Baris SQL ke Lajur Menggunakan PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!