首頁 > 資料庫 > mysql教程 > 如何使用準備好的語句在 MySQL 中執行動態透視?

如何使用準備好的語句在 MySQL 中執行動態透視?

Mary-Kate Olsen
發布: 2025-01-06 07:31:41
原創
320 人瀏覽過

How to Perform Dynamic Pivoting in MySQL Using Prepared Statements?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板