首页 > 解决方案 > 按两列分组,里面有两个排序元素

问题描述

好的,我试着问这个,它被标记为重复的一些其他问题,不回答我想问的问题。因此,如果你们能够在驳回问题之前真正阅读该问题,那就太好了。

我有一张表,我在其中注册用户在某些游戏中的表现(我们称之为“分数”。该表基本上是:id、id_user、id_game、game_level、分数和时间。

然后我有一个表(我们称之为“游戏”),用于存储游戏信息,基本上是:id、名称、级别、描述等。

所以,我现在需要的是为确定的用户获得每个游戏和级别配对的最佳结果(分数 desc,时间 asc),同时从游戏表中检索游戏信息。

我尝试的是:

SELECT id_game
     , game_level
     , score
     , time 
  FROM scores 
 where id_user = 4 
 order 
    by id_game asc 
     , game_level asc
     , score desc
     , time asc

我得到了所有我想要的结果。然后我将其用作派生表来对结果进行排序,如下所示:

SELECT * 
  from 
     ( SELECT id_game
            , game_level
            , score
            , time 
         FROM scores 
        where id_user = 4 
        order 
           by id_game asc
            , game_level asc
            , score desc
            , time asc
       ) A 
   group 
      by id_game
       , game_level

它确实分组,但没有显示每组的第一个结果(最高分和最低时间)。我想也许它会显示小组的最后一个结果,所以我尝试反转分数逻辑,但效果不佳。

我做错了什么,有没有更简单的方法呢?

Ps.:我什至没有尝试加入游戏桌来获取游戏信息,因为我无法获得我想要的结果。

好的,这是示例数据:

+----+---------+------------+-------+-------+---------+
| id | id_game | game_level | score | time  | id_user |
+----+---------+------------+-------+-------+---------+
|  1 |       1 |          1 |    70 | 01:20 |       4 |
|  2 |       1 |          1 |    70 | 01:17 |       4 |
|  3 |       1 |          2 |    66 | 00:44 |       4 |
|  4 |       1 |          2 |    64 | 00:22 |       4 |
|  5 |       1 |          3 |   100 | 03:24 |       4 |
|  6 |       1 |          4 |    99 | 01:29 |       4 |
|  7 |       1 |          4 |    99 | 01:23 |       4 |
+----+---------+------------+-------+-------+---------+

这是预期的结果:

+---------+------------+-------+-------+
| id_game | game_level | score | time  |
+---------+------------+-------+-------+
|       1 |          1 |    70 | 01:17 |
|       1 |          2 |    66 | 00:44 |
|       1 |          3 |   100 | 03:24 |
|       1 |          4 |    99 | 01:23 |
+---------+------------+-------+-------+

我找到了很多答案,解释了如何通过参数对一个订单执行此操作,但没有两个答案。

标签: mysql

解决方案


推荐阅读