分组排名,获取具体名次,oracle和mysql两种方式

计算同一门课程下所有人的分数排名。

oracle

建表语句

create table a(
      id number ,
      name varchar2(250),
      user_name varchar2(250),
      score number 
);

查询语句:

SELECT RANK() OVER(PARTITION BY NAME ORDER BY SCORE DESC) AS PAIMING,
       NAME,
       USER_NAME,
       SCORE
  FROM (SELECT * FROM A ORDER BY NAME, SCORE DESC) A

结果:
查询结果

mysql

建表语句

CREATE TABLE a (
 id INT(11) PRIMARY KEY AUTO_INCREMENT,
 major VARCHAR(20),
 user_name VARCHAR(20),
 score INT
)

查询语句

此处思路:定义一个变量@rank用来计算排名,@nowType存当前数据的课程类型,@lastType存放上一条记录的课程类型,@rank递增,如果当前课程类型和上一条的课程类型不是 一种的时候,重置@rank的值为1,重新进行排序。

SELECT a.*,
       @lastType := @nowType AS last_type,
       @nowType := a.major AS now_type,
       IF(@nowtype = @lastType, @rank := @rank + 1, @rank := 1) AS rank
  FROM a AS a, (SELECT @rank := 0, @nowType := 0) AS b
  ORDER BY major,score DESC

结果:
在这里插入图片描述
---------- ^ - ^-----------我要做那颗最张扬的韭菜!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值