MySQL是一種流行的開源關系數據庫系統,主要用于存儲和管理數據。在數據庫設計中,有時候需要將縱向數據變為橫向數據,這就需要使用MySQL的PIVOT功能。
PIVOT是一種將行轉換為列的方法,適用于將縱向數據轉換為橫向數據,類似于轉置矩陣。將一列具有相同關鍵字的行數據,變為以該關鍵字為列名的橫向數據,可以使數據更直觀和易于分析。
SELECT * FROM ( SELECT user_id, address, phone FROM user_info ) AS u PIVOT ( MAX(phone) FOR address IN ('北京', '上海', '廣州', '深圳') ) AS p;
上述代碼中,首先從user_info表中查詢出user_id、address和phone三個字段,接著使用PIVOT將address字段轉換為列名,將phone字段作為該列的值。最后得到的結果是以user_id作為唯一標識,以北京、上海、廣州、深圳四個城市為列名,phone作為對應值的橫向數據表格。
需要注意的是,PIVOT功能只適用于MySQL的動態SQL(即prepared statement)語法,而不適用于普通的SQL語句。同時,PIVOT功能也只適用于MySQL 8.0及以上版本。對于低版本的MySQL,可以使用CASE WHEN語句實現類似的效果。
SELECT user_id, MAX(CASE address WHEN '北京' THEN phone ELSE NULL END) AS 北京, MAX(CASE address WHEN '上海' THEN phone ELSE NULL END) AS 上海, MAX(CASE address WHEN '廣州' THEN phone ELSE NULL END) AS 廣州, MAX(CASE address WHEN '深圳' THEN phone ELSE NULL END) AS 深圳 FROM user_info GROUP BY user_id;
上述代碼中,使用了CASE WHEN語句將address字段的值進行判斷,并根據判斷結果將phone字段的值放入對應列中。最后通過GROUP BY對結果進行分組,得到最終的橫向數據表格。
上一篇mysql純潔度
下一篇html css小圖標