Untuk soalan di atas, jika anda tidak menggunakan fungsi yang digunakan kali ini, jawapannya adalah seperti berikut, jika MySQL anda tidak boleh menggunakan fungsi dalam artikel ini, anda boleh lulus logik tatabahasa berikut untuk penggantian.
SELECT t1.Score as Score, ( SELECT COUNT(DISTINCT t2.Score) FROM Scores t2 WHERE t2.Score >= t1.Score ) AS `Rank` FROM Scores t1 ORDER BY t1.Score DESC
Fungsi: Kedudukan selepas mengetahui syarat yang ditetapkan jika sama, kedudukannya akan sama, dan kedudukan akan terhenti.
Fungsi ini boleh digunakan untuk kedudukan pelajar, di mana dua pelajar dengan markah yang sama akan diikat, dan pelajar seterusnya akan mengosongkan jawatan yang sepatutnya. Iaitu: 1 1 3 4 5 5 7
SELECT id, name, score, rank() over(ORDER BY score DESC) AS 'rank' FROM student
Fungsi: Ketahui yang ditentukan Mereka selepas syarat ditarafkan Jika syarat adalah sama, kedudukannya adalah tidak berterusan.
Nota: Ia mempunyai kesan yang sama seperti rank() over, bezanya dense_rank() over ranking adalah padat dan berterusan. Gunakan fungsi ini untuk menentukan kedudukan pelajar. Sekiranya skor yang sama, dua pelajar akan terikat untuk ranking, dan pelajar peringkat seterusnya akan ditentukan berdasarkan ranking seterusnya. Iaitu: 1 1 2 3 4 5 5 6
SELECT id, name, score, dense_rank() over(ORDER BY score DESC) AS 'rank' FROM student
Fungsi: Cari keluar Kedudukan dilakukan selepas menyatakan syarat Jika syarat adalah sama, kedudukan akan berbeza, dan kedudukan akan tidak berterusan.
Walaupun nilai yang ditanya adalah sama, fungsi ini akan mengisih nilai tersebut secara berterusan tanpa mengambil kira sama ada nilai tersebut selari. Iaitu: 1 2 3 4 5 6
SELECT id, name, score, row_number() over(ORDER BY score DESC) AS 'rank' FROM student
Logik perniagaan dalam fungsi boleh menjadi rumit dan tidak terhad kepada ORDER BY, anda juga boleh menambah PARTITION BY.
### 分班级排名 SELECT id, name, score, class, row_number() over(PARTITION BY class ORDER BY score DESC) AS 'rank' FROM student
Atas ialah kandungan terperinci Cara menggunakan rank() over, dense_rank() over dan row_number() over dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!