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
Lepaskan: 2025-01-06 09:44:43
asal
405 orang telah melayarinya

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

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

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

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