Mysql实现Oracle中row_number ( ) over ( partition BY ORDER BY DESC )

Mysql实现Oracle中row_number ( ) over ( partition BY 字段1 ORDER BY 字段2 DESC )

 

例表:

 

案例1,row_number ( ) over (ORDER BY 字段2 DESC )

Oracle

Mysql

SELECT

       b.*,

       row_number ( ) over ( ORDER BY PRICE DESC ) AS rk

FROM

       TEST b;

SELECT

       b.*,

       ( @rownum := @rownum + 1 ) rk

FROM

       ( SELECT @rownum := 0 ) rownum ,

       TEST b

ORDER BY

       PRICE DESC;

 

案例2,row_number ( ) over ( partition BY 字段1 ORDER BY 字段2 DESC )

Oracle

Mysql

SELECT

       b.foodname,

       b.price,

    b.orderid,

       row_number ( ) over ( partition by ORDERID ORDER BY PRICE DESC ) rk

FROM

       TEST b;

SELECT

       b.foodname,

       b.price,

IF

       ( @p = orderid, @rownum := @rownum + 1, @rownum := 1 ) rk,

       @p := orderid orderid

FROM

       ( SELECT @p := NULL, @rownum := 0 ) rownum,

       TEST b

ORDER BY

       orderid,

       PRICE DESC;

备注:注意标红处是否遗漏

 

案例3,row_number ( ) over ( partition BY 字段1,字段3 ORDER BY 字段2 DESC )

Oracle

Mysql

SELECT

       b.*,

       rank ( ) over ( partition BY ORDERID, FOODNAME ORDER BY PRICE DESC ) AS rk

FROM

       TEST b;

SELECT

       b.price,

IF

       ( @p = orderid AND @q = foodname, @rownum := @rownum + 1, @rownum := 1 ) rk,

       @p := orderid orderid,

       @q := foodname foodname

FROM

       ( SELECT @p := NULL, @q := NULL, @rownum := 0 ) rownum,

       TEST b

ORDER BY

       orderid,

       foodname,

       price DESC;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值