Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melakukan Kedudukan Berkumpulan dalam MySQL Menggunakan Subkueri dan Pembolehubah?

Bagaimana untuk Melakukan Kedudukan Berkumpulan dalam MySQL Menggunakan Subkueri dan Pembolehubah?

Susan Sarandon
Susan Sarandonasal
2025-01-17 19:46:09552semak imbas

How to Perform Grouped Ranking in MySQL Using Subqueries and Variables?

Penjelasan terperinci tentang kedudukan kumpulan MySQL

Pengenalan

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.

Senario Masalah

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

Penyelesaian

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>

Penjelasan

Pertanyaan ini adalah langkah demi langkah:

  1. Pertanyaan awal diisih dahulu dengan id_class dan kemudian dengan grade dalam tertib menurun.
  2. Pembolehubah sementara @student dan @class dimulakan kepada -1.
  3. @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.
  4. @class diberikan nilai baharu id_class dan akan digunakan untuk lelaran pertanyaan seterusnya.
  5. Akhir sekali, 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!

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