Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengubah Data Tanda Pelajar daripada Format Panjang ke Lebar dalam SQLite?

Bagaimana untuk Mengubah Data Tanda Pelajar daripada Format Panjang ke Lebar dalam SQLite?

Barbara Streisand
Barbara Streisandasal
2025-01-10 12:46:42366semak imbas

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

Struktur jadual pangsi dalam SQLite

Pengenalan:

Perataan data, juga dikenali sebagai format panjang, ialah kaedah biasa untuk menyimpan data dalam SQLite. Walau bagaimanapun, kadangkala data ini perlu ditukar kepada format yang luas, di mana setiap baris mewakili subjek dan lajur mewakili markah subjek itu untuk pelajar tertentu. Proses ini dipanggil perspektif.

Pernyataan masalah:

Anda mempunyai dua jadual, satu yang menyimpan data pelajar (pelajar, nama) dan satu lagi yang menyimpan markah mereka dalam mata pelajaran yang berbeza (pelajar, subjek, markah). Tugasnya adalah untuk mendapatkan maklumat pelajar dalam format yang luas di mana setiap baris mewakili pelajar dan lajur mewakili markah mereka dalam subjek tertentu.

Penyelesaian menggunakan CASE dan KUMPULAN OLEH:

<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>

Penyelesaian ini menggunakan pernyataan CASE dalam fungsi agregat SUM(). Bagi setiap subjek (3, 4, 5), ia menyemak sama ada jadual butiran markah mengandungi baris yang sepadan dan menjumlahkan markah yang sepadan. Klausa GROUP BY memastikan bahawa keputusan dikumpulkan mengikut ID dan nama pelajar.

Penyelesaian alternatif menggunakan sambung luar kiri:

<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>

Penyelesaian alternatif ini menggunakan LEFT OUTER JOIN untuk memadankan pelajar dengan markah masing-masing dalam jadual butiran markah. Bagi pelajar yang tidak mempunyai markah dalam mata pelajaran tertentu, lajur skor (subjectid_3, subjectid_4, subjectid_5) akan dikembalikan sebagai NULL.

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Data Tanda Pelajar daripada Format Panjang ke Lebar dalam SQLite?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn