mysql使用rank()函数排序

一、创建表

CREATE TABLE `players` (
  `pid` INT(2) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  `age` INT(2) NOT NULL,
  PRIMARY KEY (`pid`),
  UNIQUE KEY `name` (`name`)
) ENGINE=INNODB  DEFAULT CHARSET=latin1;
INSERT INTO `players` (`pid`, `name`, `age`)
VALUES
  (1, 'Samual', 25),
  (2, 'Vino', 20),
  (3, 'John', 20),
  (4, 'Andy', 22),
  (5, 'Brian', 21),
  (6, 'Dew', 24),
  (7, 'Kris', 25),
  (8, 'William', 26),
  (9, 'George', 23),
  (10, 'Peter', 19),
  (11, 'Tom', 20),
  (12, 'Andre', 20);

在这里插入图片描述

二、mysql使用rank()函数排序

SELECT NAME,age,RANK() OVER(ORDER BY age ASC) AS 'rank' FROM players; 

在这里插入图片描述
三、使用row_number()函数排序

SELECT NAME,age,ROW_NUMBER() OVER(ORDER BY age ASC) AS 'rank' FROM players; 

在这里插入图片描述

四、使用mysql基本语法做排序

SELECT temp.pid,temp.name,temp.age,
@j:=@j+1 AS number,
@k:=(CASE WHEN @pre_age=temp.age THEN @k ELSE @j END) AS 'rank',
@h:=(CASE WHEN @pre_age=temp.age THEN @h ELSE (CASE WHEN @h=0 THEN @j ELSE @h+1 END) END) AS 'rank2(本行可删除)',
@pre_age:=temp.age AS pre_age
FROM (SELECT * FROM players ORDER BY age ASC) temp,
(SELECT @k:=0,@j:=0, @h:=0, @pre_age:=0) initNum

出现3种样式的排序
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 8.0中,可以使用rank()函数来实现排名功能。rank()函数用于计算每行在结果集中的排名。它的基本语法如下: rank() over (order by column_name) 其中,order by子句指定了按照哪个字段进行排名。rank()函数会根据指定的字段对结果集进行排序,并为每行分配一个排名值。排名值越小,表示排名越高。 举个例子,假设我们有一个名为student的表,其中包含sid、sname和sage三个字段。要计算每个学生的排名,可以使用以下查询语句: SELECT sid, sname, sage, rank() over (order by sage desc) as rank FROM student 这个查询会按照sage字段降序排列学生的成绩,并为每个学生分配一个排名值。排名值越小,表示成绩越高。 需要注意的是,在使用rank()函数时,需要使用over子句指定窗口。在这个例子中,我们没有指定partition by子句,因此整个结果集被视为一个窗口。 总结起来,MySQL 8.0中的rank()函数可以用来计算结果集中每行的排名,通过指定order by子句来确定排名的依据。 #### 引用[.reference_title] - *1* [Mysql基础之rank函数使用](https://blog.csdn.net/m0_60196931/article/details/125214918)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MYSQL8.0窗口函数](https://blog.csdn.net/cristianoxm/article/details/127144695)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MySQL8.0窗口函数之排名函数rank、dense_rank)的使用](https://blog.csdn.net/weixin_43857827/article/details/113739269)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值