2015-02-08 57 views
0

我的查询是获取每个玩家的最高分和该会话耗用的时间。SQL ORDER BY子查询

在MySQL中,下面的查询使用和工程

SELECT Playername as 'Player Name', HighScores.P1Score as 'Highest Score', TimeElapsed as 'Elapsed Time' 
FROM 
(gamerecord inner join playerprofile ON playerprofile.PID = gamerecord.PID), 
(SELECT GID, PID, P1Score 
FROM (SELECT GID, PID, P1Score 
     FROM gamerecord 
     ORDER BY 3 DESC) AS sortedtable 
GROUP BY PID) AS HighScores 
WHERE gamerecord.GID = Highscores.GID 

现在,随着MSSQL Server时,下面的错误被抛出。

ORDER BY子句是在视图中,内联函数,派生表,子查询和公用表表达式无效,除非同时指定TOPOFFSETFOR XML

最内层查询用于在GROUP BY操作之前对结果进行排序。据观察,GROUP BY的价值最高,因此通过排序,我确定最高值是最高分。

我怎样才能使这与MSSQL的工作没有被抛出的错误?

+0

在第7行中,您不能使用'ORDER BY 3 DESC'。而不是'3',您必须使用有效的列名称。 **编辑:**显然,这是有效的语法(即使我没有看到它的意义)。该错误必须在其他地方。 – 2015-02-08 14:02:19

+0

在MySQL中,这是一个没有记录的解决方案(除非您计算手册相关页面的注释部分)。你不能使用记录的解决方案吗? – Strawberry 2015-02-08 14:03:19

+0

@Michael Wagner'ORDER BY 3 DESC'不是他期望的那样,但它仍然是有效的语法。您只需按表达式排序,而不是仅列名。这不是错误的原因。 – 2015-02-08 14:05:23

回答

1

我期望找到使用group每场比赛得分最高的查询,然后在其余的信息加入:

SELECT pp.Playername , gr.P1Score as HighestScore, gr.TimeElapsed 
FROM gamerecord gr inner join 
    playerprofile pp 
    ON pp.PID = gr.PID inner join 
    (SELECT PID, max(p1score) as maxscore 
     FROM gamerecord 
     GROUP BY PID 
    ) grmax 
    ON gr.PID = grmax.PID and gr.p1score = grmax.maxscore; 

order by是不适合这种类型的查询。

+0

我看不到这是如何工作,也没有工作。 GID是每场比赛的唯一标识符。它是gamerecord表的主键。因此'max(P1Score)'在这种情况下不做任何事情。 – DarkDestry 2015-02-08 14:21:08

+0

我修改了一些正在使用的名称,它的工作原理。谢谢。 – DarkDestry 2015-02-08 14:34:37