2015-02-08 56 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