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:
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;
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:
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;
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!