MySql排序排名

 

之前做销售业绩排行榜的时候,每个月需要对商家(类似分店)的销售额进行一次排名(不考虑添加一个自增主键的情

 

况),根据商家的id直接去查询他在所有商家中的排名,数据库mysql。

 

 

 

这里采用的是定义临时变量的方法,让临时变量跟着记录去递增

 

SELECT A.*,@rank:=@rank+1 as rank 
     FROM     
     (    
      SELECT column FROM table  ORDER BY column  DESC    
     ) A ,(SELECT @rank:=0) B   

 

### MySQL 排序函数及其使用 在 SQL 中,生成排名通常依赖于窗口函数 (Window Function),特别是 `ROW_NUMBER()`、`RANK()` 和 `DENSE_RANK()` 函数。这些函数能够基于特定字段的排序顺序为记录分配排名。 #### ROW_NUMBER() 此函数会按照指定列的值进行排序并返回每行唯一的编号。即使存在相同的值,也会赋予不同的行号[^2]。 ```sql SELECT id, name, score, ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num FROM students; ``` 上述代码将对学生表中的成绩按降序排列,并给每一行分配一个独一无二的位置号码。 #### RANK() 该函数同样依据设定条件对数据集内的项目实施排序处理,不过当遇到相同数值时,则给予相等位次;之后跳跃至下一个可用位置继续计数。 ```sql SELECT id, name, score, RANK() OVER (ORDER BY score DESC) AS rank_val FROM students; ``` 这段语句会对分数做同样的降序整理工作,但对于拥有相同得分的学生而言,它们会被授予一致名次,而后续学生的排名则相应跳过某些整数。 #### DENSE_RANK() 与 `RANK()` 类似,但是不会跳过任何等级。也就是说,在有多个条目共享同一级别的情况下,紧接其后的其他成员依旧获得连续性的编排。 ```sql SELECT id, name, score, DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank_val FROM students; ``` 这里展示的是如何利用密集排名机制来避免因重复项而导致的不连贯序列问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值