Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Pivot Data dalam MySQL Menggunakan GROUP_CONCAT dan Mengendalikan Pengepala Lajur Dinamik?

Bagaimana untuk Pivot Data dalam MySQL Menggunakan GROUP_CONCAT dan Mengendalikan Pengepala Lajur Dinamik?

Linda Hamilton
Linda Hamiltonasal
2025-01-06 09:44:43347semak imbas

How to Pivot Data in MySQL Using GROUP_CONCAT and Handle Dynamic Column Headers?

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!

Kenyataan:
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