簡體   English   中英

在MySQL中獲取具有最大值的條目

[英]Get entry with max value in MySQL

我有一個MySQL數據庫,其中包含許多游戲的高分條目。 我想獲得分數最高的“個人最佳”條目。

我找到了我認為可行的解決方案,直到我在數據庫中獲得更多名稱,然后它才返回完全不同的結果。

到目前為止,我的代碼:

SELECT name, score, date, version, mode, custom
FROM highscore
WHERE score = 
    (SELECT MAX(score) 
             FROM highscore 
             WHERE name = 'jonte' && gamename = 'game1')

對於很多值,實際上會返回正確的值,如下所示:

JONTE   240 2014-04-28 02:52:33 1   0   2053    

它可以很好地處理數百個條目,其中一些條目的名稱不同。 但是,當我添加新條目並將名稱交換為'gabbes'時,對於新名稱,我卻獲得了多個條目的列表。 我在這里看不到邏輯,因為數據庫中的條目似乎完全相同,但數據有所不同。

JONTE   176 2014-04-28 11:03:46 1   0   63  
GABBES  176 2014-04-28 11:09:12 1   0   3087    

上面有兩個整數,但有時也可能會連續返回10-20個條目。

有什么幫助嗎?

如果您想要每個人的高分(即個人最高分),您可以這樣做...

SELECT name, max(score)
FROM highscore
WHERE gamename = 'game1'
GROUP BY name

或者,您可以執行此操作...

SELECT name, score, date, version, mode, custom
FROM highscore h1
WHERE score = 
    (SELECT MAX(score) 
             FROM highscore h2
             WHERE name = h1.name && gamename = 'game1')

注意:在您的SQL中,您的子句缺少name = h1.name謂詞。

但是請注意,如果第二個選項多次記錄相同的高分,則該選項將為同一個人提供多個行。

因為多個條目具有相同的高分,所以將返回多個條目。 您可以添加LIMIT 1僅獲得一個條目。 您可以使用ORDER BY子句選擇返回哪個條目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM