Penjelasan terperinci kedudukan kumpulan MySQL
Dalam sesetengah senario, data perlu disusun berdasarkan kumpulan dan bukannya bergantung pada satu medan sahaja. Sebagai contoh, katakan terdapat jadual pelajar yang mengandungi ID pelajar, ID kelas dan gred seperti 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 |
Untuk meletakkan kedudukan pelajar dalam setiap kelas berdasarkan gred mereka, pertanyaan MySQL berikut boleh digunakan:
SELECT id_student, id_class, grade, @student:=CASE WHEN @class = id_class THEN @student+1 ELSE 1 END AS rn, @class:=id_class AS clset FROM (SELECT @student:= 0) s, (SELECT @class:= 0) c, (SELECT * FROM mytable ORDER BY id_class, grade DESC, id_student ) t
Pertanyaan ini mengandungi langkah-langkah berikut:
Permulaan pembolehubah: Dua pembolehubah pengguna @student
dan @class
dimulakan kepada 0.
Pemprosesan baris demi baris: Pertanyaan luar memproses setiap baris hasil yang ditetapkan dalam susunan yang ditentukan oleh klausa ORDER BY
(id_class
, grade DESC
, id_student
). Ambil perhatian bahawa grade DESC
digunakan dalam menyusun di sini untuk memastikan pelajar yang mempunyai markah tinggi berada di kedudukan pertama.
Kedudukan dalam kumpulan: Penyata CASE
menyemak sama ada id_class
semasa adalah sama dengan id_class
sebelumnya (@class
). Jika ia adalah sama, tambahkan 1 pada @student
; jika tidak, tetapkan semula @student
kepada 1. Ini memastikan bahawa nilai rn
(kedudukan) adalah unik dalam setiap kumpulan (id_class
).
Tugasan berkumpulan: @class
diberikan id_class
semasa dan akan dibandingkan pada baris seterusnya.
Keluaran pertanyaan ini akan memberikan kedudukan kumpulan pelajar yang diingini:
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 |
Atas ialah kandungan terperinci Bagaimana untuk Kedudukan Data dalam Kumpulan dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!