繁体   English   中英

排名 - 选择相应的列值为MAX(列)值

[英]Ranking - Select corresponding column values to a MAX(column) value

我有一个带有以下字段的游戏桌: user_id, level, clear_time

有N个级别,表格跟踪用户何时超过某个级别。 现在,我需要根据两个约束对用户进行排名: levelclear_time 显而易见,处于较高级别的用户处于领先地位,但当多个用户处于同一级别时, clear_time决定谁领先,即首先清除该级别的用户。 以下是我尝试过的,不按照我想要的方式工作。 级别排序工作正常,但clear_time搞砸了。

SELECT 
    u.*,
    @rank := @rank + 1 rank
FROM
    ( SELECT
        t1.user_id user_id,
        MAX(t1.level) level,
        t1.clear_time clear_time,
        t2.username username
    FROM 
            gameplay t1
    INNER JOIN
        users t2
    ON
        ( t1.user_id = t2.id )
    GROUP BY
        user_id
    ORDER BY
        level DESC,
        clear_time ASC
    ) u
JOIN
    ( SELECT @rank := 0 ) r

我看到问题是MAX(级别)没有得到相应的clear_time。 我做不到。 分析结果,我看到没有选择MAX(t1.level)值的相应字段。 我该如何做到这一点?

听起来gameplay每个user_id有多个条目。 也就是说:级别x和级别y的条目都具有相同的user_id并且您希望选择具有最高级别和相应值clear_time ,但MAX将仅选择组中的最大级别,而不是来自同一行的clear_time值。

您可以通过gameplay的其他JOIN来完成此操作。 编辑:这是我设置的一个例子:

MariaDB [test]> select * from gameplay;
+---------+---------------------+-------+
| user_id | clear_time          | level |
+---------+---------------------+-------+
|       1 | 2014-11-08 11:22:25 |     1 |
|       1 | 2014-11-09 11:22:40 |     2 |
+---------+---------------------+-------+
2 rows in set (0.00 sec)

MariaDB [test]> select * from users;
+----+----------+
| id | username |
+----+----------+
|  1 | foo      |
+----+----------+
1 row in set (0.00 sec)

我们要在此示例中选择的行是level=2clear_time=2014-11-09 11:22:40 这是我的查询:

MariaDB [test]> SELECT t1.user_id, t2.username, t1.level, t3.clear_time
FROM 
   (SELECT user_id, max(level) as level FROM gameplay GROUP BY user_id) as t1
INNER JOIN (users t2, gameplay t3)
ON t1.user_id=t2.id AND t3.level=t1.level AND t3.user_id=t1.user_id;

+---------+----------+-------+---------------------+

| user_id | username | level | clear_time          |
+---------+----------+-------+---------------------+
|       1 | foo      |     2 | 2014-11-09 11:22:40 |
+---------+----------+-------+---------------------+
1 row in set (0.00 sec)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM