MySQL 中的動態透視
在MySQL 中,表通常包含標準化格式的數據,需要複雜的查詢來檢索更多用戶中的數據- 友好的格式。其中一種轉換是資料透視,其中列轉換為行。
考慮一個像「零件」這樣的表,它將產品零件 (part_id) 與產品類型 (part_type) 和產品 ID (product_id) 相關聯。我們希望對該表進行透視以建立一個新表,以顯示不同零件類型的每個產品的零件 ID。
MySQL 缺乏專用的 PIVOT 函數,因此我們需要使用替代技術。一種解決方案涉及使用聚合函數和 CASE 語句。對於動態資料透視,我們可以利用準備好的語句。
動態透視查詢
以下查詢使用動態SQL 來透視「Parts」表:
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when part_type = ''', part_type, ''' then part_id end) AS part_', part_type, '_id' ) ) INTO @sql FROM parts; SET @sql = CONCAT('SELECT product_id, ', @sql, ' FROM parts GROUP BY product_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
此查詢根據表中存在的不同部分型別動態產生SQL語句,並使用準備好的語句執行它以改進
結果範例
結果表將具有以下格式:
product_id part_A_id part_B_id ---------------------------------------- 1 1 2 2 3 4 3 5 6
靜態資料透視查詢
對於有限數量的零件類型,靜態資料透視查詢可以是使用:
select product_id, max(case when part_type ='A' then part_id end) as Part_A_Id, max(case when part_type ='B' then part_id end) as Part_B_Id from parts group by product_id
此查詢手動指定零件類型並產生資料透視表。
以上是如何使用準備好的語句在 MySQL 中執行動態透視?的詳細內容。更多資訊請關注PHP中文網其他相關文章!