第一篇博客-Sql排名函数DENSE_RANK

Sql排名函数☞DENSE_RANK

1、DENSE_RANK函数介绍

dense_rank函数用于返回结果集的分区内每行的排名,函数考虑到了over子句中排序字段值相同的情况,over子句中排序字段值相同的序号是一样的,后面字段值不相同的生成序号也是连续的。比如1、2、2、3。

相比较而言,另一个排名函数rank()与之类似,但是字段值不相同的序号将跳过相同的排名号排下一个,比如1、2、2、4。

dense_rank函数用法如下:

select DENSE_RANK() OVER(partition by column order by [UserId]) as den_rank,* from [Order]

需要注意的是:

  • over()函数中的partition by表示排名基于根据column的分区,省略partition by代表当前排名的结果集分区是以整个表进行的 ;
  • over子句中的order by子句与SQL语句中的order by子句没有任何关系(也区分DESC和ASC);
  • over子句中的order by 要与Sql排序记录中的order by 保持一致,否则得到的序号可能不是连续的。

下面通过两个最近刷到的LC数据库习题来进行DENSE_RANK函数的讲解。

2、eg.1-第N高的薪水

编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null

+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200                    |
+------------------------+

比较直观的一种方法,直接单表查询后使用limit N,1获取答案:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
    SET N := N-1;
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值