2014-05-24 128 views
0

我有一個數據庫,看起來像SQL語句MAX返回錯誤的列

Year  Name  TR  AST 
1  Player 1 10  3 
2  Player 1 23  "-" 
3  Player 1 35  5 
1  Player 2 32  1 
2  Player 2 29  "-" 
3  Player 2 50  2 
1  Player 3 74  3 
2  Player 3 23  1 
3  Player 3 93  9 

我試圖返回球員名稱和MAX TR量。所以在這種情況下,玩家3將擁有93 TR。

我使用這個SQL查詢SQLITE

SELECT MAX(TR), name 
FROM database 
WHERE TR != "-" 

它返回正確的MAX(TR)內,但它給了錯誤的玩家名稱。

93 Player 1 

我運行了其他查詢,如MAX(AST),它也給出了錯誤的播放器名稱。無論我使用哪個MAX查詢,哪個問題出在哪裏,都會返回相同的玩家名稱。

我也試過這種試圖按照SQL的執行順序從這裏http://www.bennadel.com/blog/70-sql-query-order-of-operations.htm

FROM database 
WHERE TR != "-" 
SELECT MAX(TR), name 

除了

SELECT name, MAX(TR) 
FROM database 
GROUP BY name 
LIMIT 1 

,並返回錯誤的TR但正確的對應名稱爲那TR。

如果它是一個問題,我不得不使用

WHERE TR != "_" 

否則它會返回一個球員的名字和TR「 - 」。我不確定這是爲什麼。

查詢語句的順序有問題嗎?

+1

我真的很驚訝,查詢在所有工作。通常,如果您一起使用列和聚合函數,則需要使用group by。 – pscuderi

回答

1

得到你想要的東西,最簡單的方法是使用order bylimit

SELECT name, TR 
FROM database 
WHERE TR <> '-' 
ORDER BY TR DESC 
LIMIT 1; 

你甚至都不需要max()

+0

謝謝。我刪除了以前的評論,因爲我明白爲什麼Max()在這裏不起作用。 –

0

我會用一個子查詢,大概是這樣的:

SELECT 
    name, 
    TR 
FROM 
    database 
WHERE 
    TR IN (
     SELECT 
      MAX(TR) 
     FROM 
      database 
     WHERE 
      TR != "-" 
    ) 

注意,這可以給你多結果時,有多個玩家在同一TR,這也是最大TR。

0

MAX是SQL中的一個聚合函數。你不能在SELECT語句中使用聚合函數和非聚合元素,比如你的情況中的列。

而不是做那些嘗試這種解決方案:

SELECT name, TR 
FROM database 
WHERE TR = (
    SELECT MAX(TR) 
    FROM database 
    WHERE TR != "-" 
)