Pivot-Tabellenstruktur in SQLite
Einleitung:
Datenreduzierung, auch Langformat genannt, ist eine gängige Methode zum Speichern von Daten in SQLite. Manchmal ist es jedoch erforderlich, diese Daten in ein breites Format zu konvertieren, in dem jede Zeile ein Fach und die Spalten die Ergebnisse dieses Fachs für einen bestimmten Schüler darstellen. Dieser Vorgang wird Perspektive genannt.
Problemstellung:
Sie haben zwei Tabellen, eine, in der die Schülerdaten (Student, Name) gespeichert werden, und die andere, in der die Ergebnisse in verschiedenen Fächern (Student, Fach-ID, Noten) gespeichert werden. Die Aufgabe besteht darin, Schülerinformationen in einem breiten Format abzurufen, wobei jede Zeile einen Schüler und die Spalten seine Noten in einem bestimmten Fach darstellen.
Lösung mit CASE und 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>
Diese Lösung verwendet die CASE-Anweisung in der Aggregatfunktion SUM(). Für jede Subjekt-ID (3, 4, 5) prüft es, ob die Markdetails-Tabelle eine passende Zeile enthält und summiert die entsprechenden Bewertungen. Die GROUP BY-Klausel stellt sicher, dass die Ergebnisse nach Studenten-ID und Name gruppiert werden.
Alternative Lösung mit Left Outer Join:
<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>
Diese alternative Lösung verwendet einen LEFT OUTER JOIN, um Schüler mit ihren jeweiligen Punktzahlen in der Notendetails-Tabelle abzugleichen. Für Studierende, die in einem bestimmten Fach keine Ergebnisse haben, werden die Bewertungsspalten (Subjekt-ID_3, Subjekt-ID_4, Subjekt-ID_5) als NULL zurückgegeben.
Das obige ist der detaillierte Inhalt vonWie kann ich Schülernotendaten in SQLite vom Lang- ins Breitformat umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!