首頁 > 資料庫 > mysql教程 > 如何在 SQLite 中將學生評分資料從長格式轉換為寬格式?

如何在 SQLite 中將學生評分資料從長格式轉換為寬格式?

Barbara Streisand
發布: 2025-01-10 12:46:42
原創
330 人瀏覽過

How to Pivot Student Marks Data from Long to Wide Format in SQLite?

在SQLite中透視表結構

引言:

資料扁平化,也稱為長格式,是SQLite中儲存資料的常用方法。但是,有時需要將這些資料轉換為寬格式,其中每一行代表一個科目,列代表特定學生的該科目的分數。此過程稱為透視。

問題陳述:

您有兩個表,一個儲存學生資料(studid、name),另一個儲存他們不同科目的分數(studid、subjectid、marks)。任務是以寬格式檢索學生訊息,其中每一行代表一個學生,列代表他們特定科目的分數。

使用CASE和GROUP BY的解決方案:

SELECT
    si.studid,
    si.name,
    SUM(CASE WHEN md.subjectid = 3 THEN md.marks END) AS subjectid_3,
    SUM(CASE WHEN md.subjectid = 4 THEN md.marks END) AS subjectid_4,
    SUM(CASE WHEN md.subjectid = 5 THEN md.marks END) AS subjectid_5
FROM
    student_info si
JOIN
    markdetails md ON md.studid = si.studid
GROUP BY
    si.studid, si.name;
登入後複製

此解決方案在SUM()聚合函數中使用CASE語句。對於每個subjectid(3、4、5),它檢查markdetails表是否包含符合的行,並對相應的分數求和。 GROUP BY子句確保結果按學生ID和姓名分組。

使用左外連接的替代方案:

SELECT
    u.stuid,
    u.name,
    s3.marks AS subjectid_3,
    s4.marks AS subjectid_4,
    s5.marks AS subjectid_5
FROM
    student_info u
LEFT OUTER JOIN
    markdetails s3 ON u.stuid = s3.stuid AND s3.subjectid = 3
LEFT OUTER JOIN
    markdetails s4 ON u.stuid = s4.stuid AND s4.subjectid = 4
LEFT OUTER JOIN
    markdetails s5 ON u.stuid = s5.stuid AND s5.subjectid = 5;
登入後複製

此替代方案使用LEFT OUTER JOIN將學生與markdetails表中各自的分數配對。對於特定科目沒有分數的學生,分數列(subjectid_3、subjectid_4、subjectid_5)將傳回為NULL。

以上是如何在 SQLite 中將學生評分資料從長格式轉換為寬格式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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