好的,我试过问这个,并且它被标记为重复一些其他问题,但没有回答我想要问的问题。因此,如果你们在解雇之前能够真正阅读这个问题,那就太棒了。
我有一张桌子,我在一些游戏中注册用户的表现(我们称之为'得分'。表基本上是: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 |
+---------+------------+-------+-------+
我找到了许多答案,解释了如何通过参数为一个订单执行此操作,但两个都没有。