首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql在分组结果中的排名

Mysql在分组结果中的排名
EN

Stack Overflow用户
提问于 2017-06-30 03:10:48
回答 1查看 1.2K关注 0票数 2

我读过回答如何在mysql中对结果排序的帖子,但我的问题是如何在组内分配等级。

让我举个例子来解释

数据:

代码语言:javascript
复制
  sem_id | result_month
  --------------------
   1    |1313907325000
   1    |1345529725000
   2    |1329804925000
   2    |1361427325000
   3    |1377065725000
   3    |1440137725000

通过以下查询,我能够实现什么:

代码语言:javascript
复制
SELECT @ss := @ss + 1 AS rank, 
       res.sm_id, 
       res.result_month 
FROM   (SELECT sm_id, result_month 
        FROM   xx_table
        GROUP  BY sm_id, 
                  result_month) AS res,(SELECT @ss := 0) AS ss; 

目前的结果:

代码语言:javascript
复制
  rank | sem_id | result_month 
  ----------------------------
  1   | 1   |1313907325000
  2   | 1   |1345529725000
  3   | 2   |1329804925000
  4   | 2   |1361427325000
  5   | 3   |1377065725000
  6   | 3   |1440137725000

我真正想要的是:

代码语言:javascript
复制
  rank | sem_id | result_month 
  ----------------------------
  1   | 1   |1345529725000
  2   | 1   |1313907325000
  1   | 2   |1361427325000
  2   | 2   |1329804925000
  1   | 3   |1440137725000
  2   | 3   |1377065725000

在上面的结果中,要观察到的是,每一组在内部排列,,每组由result_month desc排序。

帮助我如何取得上述成果?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-30 03:16:43

就快到了,使用另一个变量计算组:

代码语言:javascript
复制
SELECT @ss := CASE WHEN @grp = sem_id THEN @ss + 1 ELSE 1 END AS rank, sem_id, result_month, @grp := sem_id
FROM   (select * from xx_table ORDER  BY sem_id, result_month DESC) m
CROSS JOIN (SELECT @ss := 0, @grp = null) ss 

这里见demo

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44838004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档