首頁 > 資料庫 > mysql教程 > 如何以問題答案為列來透視 MySQL 表資料?

如何以問題答案為列來透視 MySQL 表資料?

Susan Sarandon
發布: 2024-12-21 19:31:14
原創
463 人瀏覽過

How to Pivot MySQL Table Data with Question Answers as Columns?

MySQL 資料透視表列資料作為行

資料透視表是將資料從基於列的格式轉換為行的強大工具-為基礎的格式。在 MySQL 中,可以使用 CASE 表達式結合聚合函數來實現此轉換。

要將給定資料轉換為資料透視表格式,其中問題答案顯示為列,可以使用以下查詢:

SELECT  a.ID,
        a.user_ID,
        a.job_id,
        MAX(CASE WHEN c.question = 'Is it this?' THEN b.answer END) 'Is it this?',
        MAX(CASE WHEN c.question = 'Or this?' THEN b.answer END) 'Or this?',
        MAX(CASE WHEN c.question = 'Or that? ' THEN b.answer END) 'Or that? '
FROM    Results a
        INNER JOIN Answers b
            ON a.id = b.fk_result_id
        INNER JOIN Question c
            ON b.fk_question_id = c.ID
GROUP   BY a.ID,
        a.user_ID,
        a.job_id
登入後複製

在此查詢中,CASE 表達式用於檢查Question 表的問題列,並從Answers 表中傳回對應的答案。然後使用聚合函數 MAX 來尋找每個問題的最大值,該值代表為該問題提供的答案。

動態透視

對於數字問題的數量未知或較大,可以使用以下程式碼產生動態SQL 語句:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN c.question = ''',
      question,
      ''' then b.answer end) AS ',
      CONCAT('`',question,'`')
    )
  ) INTO @sql
FROM Question;

SET @sql = CONCAT('SELECT  a.ID,
                            a.user_ID,
                            a.job_id, ', @sql, ' 
                    FROM    Results a
                            INNER JOIN Answers b
                                ON a.id = b.fk_result_id
                            INNER JOIN Question c
                                ON b.fk_question_id = c.ID
                    GROUP   BY a.ID,
                            a.user_ID,
                            a.job_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
登入後複製

此程式碼產生動態SQL 語句,可以處理任意數量的問題。它透過將每個問題的最大值連接為列名稱來動態建構 SELECT 子句。

查詢的結果將是具有所需格式的資料透視表,其中每個問題的答案顯示為單獨的列.

以上是如何以問題答案為列來透視 MySQL 表資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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