Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Kedudukan Data dalam Kumpulan dalam MySQL?

Bagaimana untuk Kedudukan Data dalam Kumpulan dalam MySQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-17 19:51:10210semak imbas

How to Rank Data Within Groups in MySQL?

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:

<code class="language-sql">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</code>

Pertanyaan ini mengandungi langkah-langkah berikut:

  1. Permulaan pembolehubah: Dua pembolehubah pengguna @student dan @class dimulakan kepada 0.

  2. 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.

  3. 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).

  4. 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!

Kenyataan:
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