【问题标题】:mysql get user rank based on score and lowest time [duplicate]mysql根据分数和最低时间获取用户排名[重复]
【发布时间】:2018-03-31 16:54:43
【问题描述】:

我有这样的桌子:

+-------------+---------------------+---------------------+--------+
| id  | name  |       start_time    |        end_time     | score  |
+-------------+---------------------+---------------------+--------+
| 1   | Jon   | 2017-10-19 01:00:00 | 2017-10-19 01:20:00 |  20    |
| 2   | Jane  | 2017-10-19 01:15:00 | 2017-10-19 01:30:00 |  20    |
| 3   | Fred  | 2017-10-19 01:00:25 | 2017-10-19 03:10:35 |  80    |
| 4   | July  | 2017-10-19 01:12:28 | 2017-10-19 01:16:35 |  10    |
+-------------+---------------------+---------------------+--------+

我想要这个:

+-------------+---------------------+---------------------+--------+-------+
| id  | name  |       start_time    |        end_time     | score  |  rank |
+-------------+---------------------+---------------------+--------+-------+
| 3   | Fred  | 2017-10-19 01:00:25 | 2017-10-19 03:10:35 |  80    |   1   |
| 2   | Jane  | 2017-10-19 01:15:00 | 2017-10-19 01:30:00 |  20    |   2   |
| 1   | Jon   | 2017-10-19 01:00:00 | 2017-10-19 01:20:00 |  20    |   3   |
| 4   | July  | 2017-10-19 01:12:28 | 2017-10-19 01:16:35 |  10    |   4   |
+-------------+---------------------+---------------------+--------+-------+

基本上,我想要按分数排序。如果分数相等,则按最低持续时间时间排序。 这与仅按 score 排序不同,它还应该从 start_time 和 end_timer 计算持续时间

【问题讨论】:

  • ID 不应该改变。但这只是SELECT * FROM TBL order by score desc, end_time asc 这是什么 rdbms 和版本?如果你想要一个“排名”列,如果它是 mySQL 与 SQL-Server,实现会有所不同。
  • 我固定了 id ,你不能只说 end_time asc ,因为你可以看到“JANE”有更高的 end_time 但结果是 15 分钟,“JON”时间是 20 分钟
  • MYSQL 5.6 版
  • 继续。尝试一下。
  • 所以你想按持续时间而不是时间减去两者?

标签: php mysql


【解决方案1】:

DEMO:

  1. 可以使用用户变量来模拟 row_number 来给我们排名。
  2. 要获得持续时间差异,只需减去时间。结束 - 开始
  3. 然后我们可以按分数降序和持续时间升序排序。

.

SELECT A.*, @RN:=@RN+1 as Rank
FROM SO46833505_TBL  A
CROSS JOIN  (Select @RN:=0) Z
ORDER BY  score desc, end_time-Start_Time asc;

【讨论】:

    猜你喜欢
    • 2014-02-12
    • 2019-02-26
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 2010-11-20
    相关资源
    最近更新 更多