假設表格為student, 資料如下:
student資料
我們要在MySQL中實作Oracle中的rank()函數功能,即組内排序,具體來說: 就是對student表中按照課程(course)對學生(name)按分數(score)高低進行排名。
首先建立存儲過程realize_rank_in_MySQL,代碼如下:DROP PROCEDURE IF EXISTS realize_rank_in_MySQL;
DELIMITER ;;
CREATE PROCEDURE realize_rank_in_MySQL()
BEGIN DECLARE i int;
SET i = 0; WHILE i
SET @ROW =0;
INSERT INTO student_rank
SELECT *, (@ROW:[email protected]+1) AS rank FROM student
WHERE course=(select DISTINCT course from student limit i,1)
ORDER BY score DESC;
set i = i + 1;
END WHILE;
END
;;
DELIMITER ;
然後輸入以下查詢語句即可:drop table if exists student_rank;
create table student_rank like student;
alter table student_rank add rank int;
call realize_rank_in_MySQL;
select * from student_rank;
結果如下:
注意:這裡的排名并沒有實作分數相同時排名也一樣的情形。
作者:但盼風雨來_jc
連結:https://www.jianshu.com/p/a1e651fe774d