Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memindahkan Baris SQL ke Lajur Menggunakan PostgreSQL?

Bagaimana untuk Memindahkan Baris SQL ke Lajur Menggunakan PostgreSQL?

Mary-Kate Olsen
Lepaskan: 2024-12-31 19:44:10
asal
854 orang telah melayarinya

How to Transpose SQL Rows into Columns Using PostgreSQL?

Memindahkan Baris SQL ke Lajur: Panduan Komprehensif

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.

Masalahnya

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?
Salin selepas log masuk

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
Salin selepas log masuk

Penyelesaian

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
Salin selepas log masuk

Memecahkan Pertanyaan

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.

Kesimpulan

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan