天天看點

mysql有rank功能_MySQL之實作Oracle中的rank()函數的功能

假設表格為student, 資料如下:

mysql有rank功能_MySQL之實作Oracle中的rank()函數的功能

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;

結果如下:

mysql有rank功能_MySQL之實作Oracle中的rank()函數的功能

注意:這裡的排名并沒有實作分數相同時排名也一樣的情形。

作者:但盼風雨來_jc

連結:https://www.jianshu.com/p/a1e651fe774d