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中文網其他相關文章!