【问题标题】:MySQL show ranks of multiple columnsMySQL显示多列的排名
【发布时间】:2014-12-16 04:15:20
【问题描述】:

我的表格如下所示:

Name Height Weight
Jim  60     150
Tom  62     170
Mac  64     160

我想找到一个返回如下内容的查询:

Name Height Weight Height_Rank Weight_Rank
Jim  60     150    3           3
Tom  62     170    2           1
Mac  64     160    1           2

如上所述,显示多列排名的最佳方式是什么?我可以使用 order by 来查找单个列的排名,但我希望在单个表中获得多个列的排名。谢谢!

编辑: 下面的答案是一个很好的解决方案。但是,如果您对数千行进行排名,您可能会遇到另一个问题。 “group_concat”的最大长度为 1024 字节。您可以通过运行“SET SESSION group_concat_max_len = 1000000;”来增加此限制。这将允许您一次对更多行进行排名。

【问题讨论】:

  • 您似乎需要对每个附加列进行嵌套查询,如here 所示。
  • 谢谢!这就是我正在寻找的,但我希望有更好的方法。
  • 几分钟后我会告诉你怎么做

标签: mysql database


【解决方案1】:

使用类似这样的东西..

SELECT Name,Height,Weight,FIND_IN_SET( Height,( SELECT GROUP_CONCAT( Height ORDER BY Height DESC ) FROM scores )) AS Height_Rank,FIND_IN_SET( Weight,( SELECT GROUP_CONCAT( Weight ORDER BY Weight DESC ) FROM scores ) ) AS Weight_Rank FROM scores

【讨论】:

  • 假设你的表名
  • 它是我用过的表名..在这里使用你的表名,让我知道它是否有效..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 2016-11-02
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多