Optimumkan penggunaan pernyataan CASE dalam MySQL
<p>Hello semua,</p>
<p>Saya mempunyai jadual seperti yang ditunjukkan dalam tangkapan skrin di atas. Saya menulis pertanyaan menggunakan penyataan <code>CASE</code> supaya ia akan mengembalikan lajur tambahan yang saya perlukan. Berikut ialah pertanyaan yang saya tulis: </p>
<pre class="brush:php;toolbar:false;">SELECT
*,
KES BILA (JUMLAH(KES WHEN kelas = 'kelas 1' KEMUDIAN 1 TAMAT) BERAKHIR(PARTITITION OLEH student_id)) >= 1 THEN 1 ELSE 0 END AS 'Class 1',
KES BILA (JUMLAH(KES KETIKA kelas = 'kelas 2' KEMUDIAN 1 TAMAT) BERAKHIR(PARTITITION BY student_id)) >= 1 THEN 1 ELSE 0 END AS 'Kelas 2',
KES BILA (JUMLAH(KES KETIKA kelas = 'kelas 3' KEMUDIAN 1 TAMAT) BERAKHIR(PARTITITION BY student_id)) >= 1 THEN 1 ELSE 0 END AS 'Kelas 3',
KES BILA (JUMLAH(KES KETIKA kelas = 'kelas 4' KEMUDIAN 1 TAMAT) BERAKHIR(PARTITITION BY student_id)) >= 1 THEN 1 LAIN 0 TAMAT SEBAGAI 'Kelas 4'
DARI qa;</pre>
<p>Ini ialah jadual keputusan yang saya dapat: </p>
<p>Apa yang saya ingin capai dalam pertanyaan ini ialah jika pelajar menghadiri kursus, ia akan memaparkan <kod>1</code> </p>
<p>Contohnya, pelajar dengan <kod>id_pelajar</kod>2</kod>1</kod>1< Di bawah lajur ;/kod> kedua-dua baris untuk <kod>id_pelajar</kod>2</kod> </p>
<p>Saya telah mencapai apa yang saya mahukan dalam pertanyaan, tetapi sekarang daripada menggunakan <kod>1</code> saya mahu ia menjadi <kod>tarikh_daftar</kod> Berikut ialah output akhir yang saya inginkan: </p>
<p>Boleh saya tahu bagaimana saya harus mengubah suai pertanyaan untuk mendapatkan output akhir dalam tangkapan skrin di atas? </p>
<p><strong>Soalan kedua:</strong></p>
<p>Seperti yang anda lihat dalam pertanyaan di atas, setiap kelas mempunyai <code>CASE</code> penyataan yang berasingan untuk membuat lajur untuk kelas itu. Walau bagaimanapun, pada masa hadapan mungkin terdapat 5,6,7,... kelas, jadi apabila terdapat kelas baharu yang berbeza, saya perlu menambah penyata <code>CASE</code>Adakah saya boleh mengoptimumkan pertanyaan saya supaya saya tidak perlu mempunyai 4 <code>CASE</code> penyata untuk 4 kelas berbeza, tetapi masih boleh mencipta lajur untuk kelas yang berbeza (apabila terdapat kelas baharu , akan ada lajur baharu) kelas juga)? </p>
<h2>Data Contoh</h2>
<pre class="brush:php;toolbar:false;">buat jadual qa(
student_id INT,
kelas varchar(20),
tarikh_tarikh_akhir_kelas,
tarikh_daftar_tarikh
);
masukkan ke dalam qa (id_pelajar, kelas, tarikh_akhir_kelas, tarikh_pendaftaran)
nilai
(1, 'kelas 1', '2022-03-03', '2022-02-14'),
(1, 'kelas 3', '2022-06-13', '2022-04-12'),
(1, 'kelas 4', '2022-07-03', '2022-06-19'),
(2, 'kelas 1', '2023-03-03', '2022-07-14'),
(2, 'kelas 2', '2022-08-03', '2022-07-17'),
(4, 'kelas 4', '2023-03-03', '2022-012-14'),
(4, 'kelas 2', '2022-04-03', '2022-03-21')
;</pre></p>