dense rank改为mysql_在mysql中对结果进行排名(oracle中’dense_rank...

下面是示例数据:

dept_id salary

10 10000

10 20000

10 20000

10 30000

20 50000

20 60000

我想对部门ID进行分组,然后按升序生成薪水等级值.输出应为

dept_id工资等级

10 10000 1

10 20000 2

10 20000 2

10 30000 3

20 50000 1

20 60000 2

我正在使用以下代码:

set @pk1 ='';

set @rn1 =1;

set @sal ='';

set @val =1;

SELECT dept_id,

salary,

denseRank

FROM

(

SELECT dept_id,

salary,

@rn1 := if(@pk1=dept_id, if(@sal=salary, @rn1, @rn1+@val),1) as denseRank,

@val := if(@pk1=dept_id, if(@sal=salary, @val+1, 1),1) as value,

@pk1 := dept_id,

@sal := salary

FROM

(

SELECT dept_id,

salary

FROM emp

ORDER BY dept_id,salary

) A

) B;

对于一小部分数据来说,这很好用,但是对于整个数据(成千上万的行)来说,运行起来确实很慢,而且要花很多时间.是否有更好的方法或某种预定义的函数(类似于oracle中的density_rank()或row_number())来更有效地完成此任务.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLDENSE_RANK函数是一种窗口函数,用于对查询结果集的行进行排序,并给每一行分配一个密集的排名值。该函数的语法如下: DENSE_RANK() OVER (PARTITION BY column1, column2... ORDER BY columnA, columnB...) 其,PARTITION BY子句用于将结果集划分为多个分区,每个分区内的行将独立计算排名。ORDER BY子句用于指定排序的列和排序顺序。 举个例子,假设我们有一个名为"number_test"的表,其包含id和number两列。我们可以使用如下查询来计算每个id组内number列的密集排名: SELECT id, number, DENSE_RANK() OVER (PARTITION BY id ORDER BY number DESC) number_rank FROM number_test 以上查询会返回一个结果集,其包含id、number以及每个id组内number列的密集排名值(number_rank)。 总结来说,MySQLDENSE_RANK函数可以帮助我们在查询结果按照指定的排序顺序为每一行分配一个密集的排名值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [leetcode曼哈顿距离-study_SQL:数据分析SQL代码](https://download.csdn.net/download/weixin_38538585/19934420)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MySQL DENSE_RANK函数简介](https://blog.csdn.net/qq_53373885/article/details/126915504)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值