关于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:=@rank+1;
    SET @sub:=subject;
ELSE
    SET @rank:=1;
    SET @sub:=subject; 
END IF;   
    RETURN @rank;
END;

猜你喜欢

转载自blog.csdn.net/dou747172348/article/details/85764696