Memaparkan Data Lajur Jadual Pangsi MySQL sebagai Baris
Menukar data lajur jadual kepada baris boleh menjadi tugas yang mencabar, terutamanya untuk pelbagai dimensi set data. Dalam MySQL, operasi ini biasanya dikenali sebagai "pivoting."
Masalah:
Dataset data yang disediakan terdiri daripada tiga jadual:
Matlamatnya adalah untuk menyusun semula data untuk mempamerkan jawapan soalan sebagai lajur untuk setiap keputusan set.
Penyelesaian:
Untuk mencapai matlamat ini, kami boleh menggunakan pertanyaan MySQL yang memanfaatkan fungsi agregat MAX() bersama-sama dengan pernyataan CASE. Pertanyaan di bawah secara berkesan menggerakkan data lajur ke dalam baris:
SELECT a.ID, a.user_ID, a.job_id, MAX(CASE WHEN c.question = 'Is it this?' THEN b.answer END) 'Is it this?', MAX(CASE WHEN c.question = 'Or this?' THEN b.answer END) 'Or this?', MAX(CASE WHEN c.question = 'Or that? ' THEN b.answer END) 'Or that? ' FROM Results a INNER JOIN Answers b ON a.id = b.fk_result_id INNER JOIN Question c ON b.fk_question_id = c.ID GROUP BY a.ID, a.user_ID, a.job_id
Penjelasan:
Pertanyaan ini menghasilkan output berikut:
result_id | user_id | job_id | Is it this? | Or this? | Or that? |
---|---|---|---|---|---|
1 | 1 | 1 | Yes | No | Maybe |
2 | 1 | 3 | Maybe | No | Maybe |
3 | 2 | 3 | Yes | Yes | No |
Versi Dinamik:
Jika anda mempunyai nombor yang tidak diketahui daripada soalan (cth., 1000), versi dinamik pertanyaan adalah lebih sesuai. Ini boleh dicapai menggunakan SQL dinamik dan gabungan pembolehubah:
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(CASE WHEN c.question = ''', question, ''' then b.answer end) AS ', CONCAT('`',question,'`') ) ) INTO @sql FROM Question; SET @sql = CONCAT('SELECT a.ID, a.user_ID, a.job_id, ', @sql, ' FROM Results a INNER JOIN Answers b ON a.id = b.fk_result_id INNER JOIN Question c ON b.fk_question_id = c.ID GROUP BY a.ID, a.user_ID, a.job_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Pertanyaan dinamik ini menggunakan gabungan pembolehubah untuk membina pernyataan SQL secara dinamik berdasarkan kandungan jadual Soalan. Hasilnya ialah pertanyaan yang lebih fleksibel yang boleh mengendalikan sebarang bilangan soalan.
Atas ialah kandungan terperinci Bagaimana untuk Mengubah Data Lajur MySQL ke Baris Menggunakan Penyata MAX() dan CASE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!