首頁 >資料庫 >mysql教程 >如何使用 GROUP_CONCAT 在 MySQL 中透視資料並處理動態列標題?

如何使用 GROUP_CONCAT 在 MySQL 中透視資料並處理動態列標題?

Linda Hamilton
Linda Hamilton原創
2025-01-06 09:44:43386瀏覽

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

MySQL PIVOT/CROSSTAB QUERY

在資料分析中,經常需要將資料從垂直格式轉換為水平格式,已知作為旋轉或交叉製表。在 MySQL 中,可以使用各種技術來實現這一點。

建立資料透視表

問題1: 考慮一個包含以下列的表: app_id、transaction_id、mobile_no、node_id、custEnt_attribue 。任務是建立一個以 app_id、transaction_id 和 mobile_no 分組的資料透視表,node_id 中的值成為列標題,對應的 Entered_value 顯示在儲存格中。

答案: 這個可以使用GROUP_CONCAT 函數來實現:

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;

使用NAME_CONST

使用NAME_CONST

您希望使用儲存在customer_attribute中的值,而不是使用 user_input1、user_input2 等作為列標題。 答案:
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;
使用NAME_CONST函數可以實現,但是會報錯由於提供的參數不正確而遇到:

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;
函數需要第二個參數為常數值,因此需要修改:

以上是如何使用 GROUP_CONCAT 在 MySQL 中透視資料並處理動態列標題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn