Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melakukan Kedudukan Berkumpulan dalam MySQL Menggunakan Subkueri dan Pembolehubah?
Sebagai pentadbir pangkalan data, anda mungkin perlu meletakkan kedudukan item dalam set data berkumpulan. MySQL menyediakan cara yang mudah untuk melaksanakan kedudukan terkumpul menggunakan gabungan subkueri dan pembolehubah sementara.
Pertimbangkan borang berikut:
ID_STUDENT | ID_CLASS | GRADE |
---|---|---|
1 | 1 | 90 |
1 | 2 | 80 |
2 | 1 | 99 |
3 | 1 | 80 |
4 | 1 | 70 |
5 | 2 | 78 |
6 | 2 | 90 |
6 | 3 | 50 |
7 | 3 | 90 |
Matlamatnya adalah untuk meletakkan kedudukan pelajar dalam setiap kelas, menghasilkan output berikut:
ID_STUDENT | ID_CLASS | GRADE | RANK |
---|---|---|---|
2 | 1 | 99 | 1 |
1 | 1 | 90 | 2 |
3 | 1 | 80 | 3 |
4 | 1 | 70 | 4 |
6 | 2 | 90 | 1 |
1 | 2 | 80 | 2 |
5 | 2 | 78 | 3 |
7 | 3 | 90 | 1 |
6 | 3 | 50 | 2 |
Untuk melaksanakan kedudukan kumpulan dalam MySQL, anda boleh menggunakan pertanyaan berikut:
<code class="language-sql">SELECT id_student, id_class, grade, @student:=CASE WHEN @class = id_class THEN @student+1 ELSE 0 END AS rn, @class:=id_class AS clset FROM (SELECT @student:= -1, @class := -1) s, (SELECT * FROM mytable ORDER BY id_class, grade DESC ) t;</code>
Pertanyaan ini adalah langkah demi langkah:
id_class
dan kemudian dengan grade
dalam tertib menurun. @student
dan @class
dimulakan kepada -1. @class
digunakan untuk menentukan sama ada mahu memasuki kumpulan baharu. Jika nilai @class
sebelumnya yang disimpan dalam id_class
berbeza daripada id_class
semasa, maka @student
ditetapkan semula kepada 0. Jika tidak, ia akan dinaikkan. @class
diberikan nilai baharu id_class
dan akan digunakan untuk lelaran pertanyaan seterusnya. rn
dikira sebagai kedudukan dalam setiap kumpulan. Ambil perhatian bahawa untuk memastikan kedudukan yang betul, pertanyaan dalam perlu diisih mengikut id_class
dan grade
dalam tertib menurun. Pertanyaan yang diubah suai ini dengan lebih jelas menunjukkan cara menggunakan pembolehubah untuk mencapai kedudukan kumpulan dan membetulkan beberapa ralat logik dalam pertanyaan asal untuk memastikan ketepatan keputusan kedudukan. Kuncinya terletak pada pertimbangan bersyarat bagi pernyataan CASE WHEN
dan kemas kini yang betul bagi pembolehubah @student
dan @class
.
Atas ialah kandungan terperinci Bagaimana untuk Melakukan Kedudukan Berkumpulan dalam MySQL Menggunakan Subkueri dan Pembolehubah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!