在資料庫管理中,資料透視是一種將資料從長格式(每行代表具有多個屬性的單一觀察值)轉換為寬格式(每行代表不同的屬性,列代表這些屬性的值)的技術。當處理以長格式儲存資料的表(如下所示)時,此過程特別有用:
<code>## studid ## ## subjectid ## ## marks ## A1 3 50 A1 4 60 A1 5 70 B1 3 60 B1 4 80 C1 5 95</code>
問題:
目標是將上面的表格轉換為寬格式,其中每位學生都有一行代表他們的姓名和每門科目的分數。期望的輸出應如下圖所示:
<code>## studid ## ## name## ## subjectid_3 ## ## subjectid_4 ## ## subjectid_5 ## A1 Raam 50 60 70 B1 Vivek 60 80 NULL C1 Alex NULL NULL 95</code>
使用 CASE 語句和 GROUP BY 子句的解:
在 SQLite 中實現此目標的一種方法是結合使用 CASE 語句和 GROUP BY 子句:
<code class="language-sql">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;</code>
使用左外連接的解決方案:
另一種方法涉及使用左外連接來組合每門科目的學生資訊和分數:
<code class="language-sql">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;</code>
這兩個 SQL 查詢都會產生所需的寬格式表,從而更輕鬆地分析和視覺化資料。
以上是如何在 SQLite 中將資料從長格式轉換為寬格式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!