操作的表:user
表数据:
这种方式是你已经用SQL处理好已经排好序的数据,单独加了一个序号的方式
// (SELECt @i:=0)j 声明一个变量(注意,如果声明的变量是关键字则会异常),变量初始值为 0,每次让它+1 // 声明一个变量 (@i:=@i+1)"字段” SELECT (@i:=@i+1)"序号", u.* FROM 表名 u,(SELECt @i:=0)j
异常声明方式:不能使用rank命令
SELECT (@i:=@i+1)"序号", u.* FROM user u,(SELECt @i:=0)rank
示例1:未对目标值进行排序
从这里可以看到,序号已经有了,但是我们的sex字段还没有做处理
示例2:对目标进行处理,再加入序号
可以看到我们的sex已经排好序,也有了使用序号作为排名字段(这种方式比较简单,下面还有更高级的往下看)
2,根据sex 增加序号,并且按照sex相同的并列select c.* ,ifnull(( select count(*) from (select * from user order by sex ) as b where c.sex > b.sex ),0)+1 as rownum from (select * from user order by sex ) as c
效果如下:
如果是要按小的在后,大的在前排名,改成小于
效果如下:
3,使用集合接收这些数据进行处理 public static void main(String[] args) {
// BigDecimal类型
ArrayList list = new ArrayList<>();
list.add(new User(1,"myqxin","1234",11,null,null));
list.add(new User(2,"zfwy","4353",12,null,null));
list.add(new User(3,"qyls","6145",17,null,null));
list.add(new User(4,"ly","2342",12,null,null));
list.add(new User(5,"bl","2532",13,null,null));
List users = mergerList(list);
for (User user : users) {
System.err.println(user);
}
}
public static List mergerList(List list){
//list降序排序
List collect = list.stream().sorted(Comparator.comparing(User::getSex)).collect(Collectors.toList());
//翻转list
Collections.reverse(collect);
Integer index=1;
Integer maxScore=0;
for (int i = 0; i < list.size(); i++) {
if (i==0){
collect.get(i).setRanking(index);
maxScore=collect.get(i).getSex();
}else if (Objects.equals(collect.get(i).getSex(),maxScore)){
collect.get(i).setRanking(index);
}else {
index++;
collect.get(i).setRanking(index);
maxScore=collect.get(i).getSex();
}
}
return collect;
}
效果如下:
这个与上面的排名相比,上面是进行了占位。这种事依次排列下去,不会存在出现相同的进行了占位



