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
Lepaskan: 2025-01-10 12:46:42
asal
363 orang telah melayarinya

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:

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan