Heim > Datenbank > MySQL-Tutorial > Wie kann ich Schülernotendaten in SQLite vom Lang- ins Breitformat umwandeln?

Wie kann ich Schülernotendaten in SQLite vom Lang- ins Breitformat umwandeln?

Barbara Streisand
Freigeben: 2025-01-10 12:46:42
Original
323 Leute haben es durchsucht

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

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage