MYSQL PIVOT/CROSSTAB QUERY
Dalam analisis data, selalunya perlu mengubah data daripada format menegak kepada format mendatar, yang dikenali sebagai pivoting atau cross-tabulating. Dalam MySQL, ini boleh dicapai menggunakan pelbagai teknik.
Mencipta Jadual Pangsi
Soalan 1: Pertimbangkan jadual yang mengandungi lajur berikut: app_id, transaction_id, mobile_no, node_id, customer_attribute dan entered_value. Tugasnya ialah untuk mencipta jadual pangsi yang dikumpulkan mengikut app_id, transaction_id dan mobile_no, dengan nilai daripada node_id menjadi pengepala lajur dan nilai_pasukan yang sepadan dipaparkan dalam sel.
Jawapan: Ini boleh dicapai menggunakan GROUP_CONCAT fungsi:
SELECT app_id, transaction_id, mobile_no, GROUP_CONCAT(CASE WHEN node_id = 1 THEN entered_value ELSE NULL END) AS Q1, GROUP_CONCAT(CASE WHEN node_id = 2 THEN entered_value ELSE NULL END) AS Q2, GROUP_CONCAT(CASE WHEN node_id = 3 THEN entered_value ELSE NULL END) AS Q3, GROUP_CONCAT(CASE WHEN node_id = 4 THEN entered_value ELSE NULL END) AS Q4, GROUP_CONCAT(CASE WHEN node_id = 5 THEN entered_value ELSE NULL END) AS Q5 FROM trn_user_log GROUP BY app_id, transaction_id, mobile_no;
Menggunakan NAME_CONST
Soalan 2: Daripada menggunakan user_input1, user_input2, dsb. sebagai pengepala lajur, anda mahu gunakan nilai yang disimpan dalam atribut_pelanggan.
Jawapan: Ini boleh dicapai menggunakan fungsi NAME_CONST, tetapi ralat telah berlaku kerana argumen yang salah diberikan:
SELECT app_id, transaction_id, mobile_no, NAME_CONST(customer_attribute, (CASE WHEN node_id = 1 THEN entered_value ELSE NULL END)) FROM trn_user_log;
Fungsi menjangka pemalar nilai untuk hujah kedua, jadi pengubahsuaian diperlukan:
SELECT app_id, transaction_id, mobile_no, CASE node_id WHEN 1 THEN NAME_CONST(customer_attribute, entered_value) ELSE NULL END AS customer_attribute FROM trn_user_log;
Atas ialah kandungan terperinci Bagaimana untuk Pivot Data dalam MySQL Menggunakan GROUP_CONCAT dan Mengendalikan Pengepala Lajur Dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!