按两列分组,内部有两个排序元素

时间:2018-05-15 16:20:25

标签: mysql

好的,我试过问这个,并且它被标记为重复一些其他问题,但没有回答我想要问的问题。因此,如果你们在解雇之前能够真正阅读这个问题,那就太棒了。

我有一张桌子,我在一些游戏中注册用户的表现(我们称之为'得分'。表基本上是: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 |
+---------+------------+-------+-------+

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

0 个答案:

没有答案