1. 程式人生 > >關於Oracle的一些內建函式在MySQL中的使用(row_number() over(partition by xxx order by xxx))

關於Oracle的一些內建函式在MySQL中的使用(row_number() over(partition by xxx order by xxx))

Oracle中:sys_guid():根據時間和機器碼生成全球唯一的序列號;  MySQL中為UUID() 
Oracle中:nvl(s,1):s不為null則輸出s,否則輸出1 ; MySQL中為IFNULL(s,1)
Oracle中:sysdate timestamp 標準時間 ;MySQL中為unix_timestamp(now())
Oracle中:decode()大致等同於switch;MySQL中可用case when、then
Oracle中:row_number() over(partition by clineID order by statname)根據clineID分組statname排序賦給序號

這個函式並沒有現成的函式去進行替換,我在做的時候找到了一種方法,不過稍微繁瑣一些。

比如說我們查詢一張成績表,根據學科分組,成績排序,那麼在Oracle中是這樣的

SELECT username,subject,grade,row_number(partition by subject order by grade) rank from performance

在MySQL中,我們需要做這麼兩步;

1、根據學科和成績進行排序

2、為分組的成績插入序號

那麼,我們就需要用到函式來實現給分組排序的效果

SELECT username,subject,grade,getrank(subject) rank from performance order by subject,grade

函式是為了返回一個序號給rank欄位

CREATE FUNCTION getrank(`subject` varchar(100))
BEGIN
IF @sub=subject THEN
    SET @rank:[email protected]+1;
    SET @sub:=subject;
ELSE
    SET @rank:=1;
    SET @sub:=subject; 
END IF;   
    RETURN @rank;
END;