对 mysql 中的结果进行排名(mysql 相当于 oracle 中的“dense_rank()”或“row_number()”函数)

2024-03-23

以下是样本数据:

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中的dense_rank()或row_number())来更有效地完成此任务。


不知道它是否更快,但似乎打字少了很多......

SELECT x.*
     , IF(@prev = dept_id
                , IF(salary <> @psalary,@i:=@i+1,@i:=@i)
         ,@i:=1) rank
     , @psalary := salary
     , @prev := dept_id prev 
  FROM my_table x
     , (SELECT @i:=1,@prev:='',@psalary:='') vars 
 ORDER 
    BY dept_id,salary;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 mysql 中的结果进行排名(mysql 相当于 oracle 中的“dense_rank()”或“row_number()”函数) 的相关文章

随机推荐

  • Alamofire - 未进行代码签名,因为其设置未指定 Xcode 8 中的开发团队

    我在 Xcode 8 上遇到了下面的错误 大家能帮忙解决一下吗 我的应用程序需要支持iOS 8及以上版本 Alamofire 不会进行代码签名 因为其设置未指定开发团队 对于使用 Swift 的目标 需要正确配置 使用旧版 Swift 语言
  • 使用进程c#进行错误处理

    我使用 C 创建了一个控制台应用程序 并使用以下命令从另一个 Windows 窗体应用程序调用它Process 下面是我的控制台应用程序代码 static void Main string args try my code catch Ex
  • JDBCRealm 和 DataSourceRealm 有什么区别? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我读到了这样的评论 根本不要使用 JDBCRealm 它根本无法扩展 因为有一个 JDBC Connection 对象用于所有数据库通
  • python和谷歌云存储

    我找不到如何使用谷歌云存储而不在谷歌应用程序引擎上运行它的示例 我想要这样的东西 这对我很有用 https github com GoogleCloudPlatform storage getting started javascript
  • JQuery 更改在模糊之前不会触发

    我使用change handler 来监听textarea的更改事件 但我只在textarea失去焦点时收到事件 但我想在值更改时立即收到事件 text object change listener function listener do
  • 避免在自定义交叉过滤器归约函数中进行多次求和

    这个问题是由于创建过程中遇到的一些困难而产生的crossfilter数据集 特别是如何对不同维度进行分组并计算派生值 最终目标是拥有一批dc js使用维度和组的图表 小提琴示例https jsfiddle net raino01r 0vjt
  • 用户日期时间设置为 GMT,如何将日期转换为其本地化设置?

    在我的用户设置中 我有一个下拉菜单 其中包含所有 GMT 日期供用户选择 在 C 中 如何将数据库中存储的日期时间转换为 GMT 时间 数据库中存储的时间为服务器时间 对于 NET 3 5 您可以将系统时区标识符与用户一起存储 您可以从Ti
  • 浏览器如何处理高度和宽度的非整数值?

    当浏览器给出的元素的宽度和高度不是整数值时 它们如何处理它们 尤其 非整数值在什么阶段进行四舍五入 它们是四舍五入到最接近的整数 还是截断它们 当容器的子元素具有非整数尺寸时 是否会出现子元素长度或高度之和不等于父元素的内部宽度 高度的情况
  • 显示 UILabel * 秒;除了 NSTimer 之外还有其他方法吗?

    是否有其他方式显示对象 按钮 其他内容 例如 3 秒而不是 NSTimer 我可以使用动画来做到这一点吗 您可以使用 performSelector withObject afterDelay 尽管它内部使用了一个计时器 theLabel
  • 获取 NSTextField 内容以缩放

    我怎样才能让文本比例适合我给它的边界 我过去也做过类似的事情 void calcFontSizeToFitRect NSRect r float targetWidth r size width xMargin float targetHe
  • C++ 按升序打印文件名

    我正在使用以下代码来迭代目录中的文件 该目录中的所有文件都有编号 每个文件都有唯一的编号 下面的代码成功打印出目录中的所有文件 但不是按升序排列 它完全随机出现 并且有一个文件是重复的 我找不到另一种打印文件或按升序打印文件的方法 我确实需
  • C# Xamarin Forms - 执行任务,超时

    和其他许多人一样 我需要编写一个返回任务的函数 并且我希望该任务在一段时间后自动超时 初始代码如下所示 class MyClass TaskCompletionSource
  • 按 nginx 中的位置提供 pdf 文件

    我如何提供文件 webapps app static downloads privacy policy pdf 按地址 https my site net privacy 我尝试在 nginx 中使用位置 但这不起作用 location p
  • Dropwizard ExceptionMapper:验证原始标头字段

    有谁知道如何从请求中获取原始标头字段 我想验证客户端是否会收到 html 或只是纯 文本响应 我可以在异常映射器的 toResponse 方法中获取此字段吗 我像这篇文章中一样创建了异常映射器 http gary rowe com agil
  • 使用温莎城堡解析 HttpControllerContext

    In the ASP NET Web API http www asp net web api HttpControllerContext实例提供了很多有关当前环境的信息 包括当前请求的URI 如果服务依赖于此类信息 例如请求 URI 则应
  • 在 Windows 上使用 Python 3.7 安装 pycairo

    我正在尝试安装 pycairo 尽管我在互联网上找到了这些内容 但我无法安装它 我确实 pip install pycairo 但它要求我安装 Visual Basic Build Tool 我做到了 但当时不起作用 我尝试了在网上找到的很
  • C++编译引入错误

    我在 Visual Studio 2010 中有一个多线程 C windows 项目 它使用 Qt 5 1 1 和 OpenCV 2 4 8 当我构建它时Debug模式一切运行正常 但是当我构建它时Release模式下程序崩溃 两种配置几乎
  • Keycloak/Undertow/JBoss-CLI - 从环境变量设置“web-context”

    我对 Wildfly Undertow 和 JBoss CLI 设置 Keycloak 的 Web 上下文有疑问 环境变量似乎并未在 undertow 本身中得到解决 但其他环境变量似乎已得到解决 我创建了以下 CLI 脚本 subsyst
  • Spring MVC 中的 PropertyPlaceholderConfigurer

    我在我的项目中使用 Spring MVC 我在中定义了详细信息web xml像这样
  • 对 mysql 中的结果进行排名(mysql 相当于 oracle 中的“dense_rank()”或“row_number()”函数)

    以下是样本数据 dept id salary 10 10000 10 20000 10 20000 10 30000 20 50000 20 60000 我想对部门 ID 进行分组 然后按升序生成工资的排名值 输出应如下所示 dept id