2016-09-20 55 views
1

我有一張桌子充滿了慈善保齡球錦標賽的單個保齡球比賽(表格:投球手)。我試圖通過可能的3場保齡球將男性和女性的頂級個人分數拉出來,並將其與來自不同表格(團隊)的團隊名稱相關聯,然後按降序排列最高分數。當從表格中的多列中選擇最大值時出現SQL錯誤

我先從男性得分開始,並有一個SQL查詢,我認爲應該爲每個人在可能的三場比賽中選擇最高得分,然後按降序排列所有記錄。我基於它關閉,我發現對堆棧溢出這裏類似的問題的答案:https://stackoverflow.com/a/6871572

這裏是我的查詢:

$topmalebowler = "SELECT bowlers.bowler_name, teams.team_name, 
(SELECT MAX(v) FROM (VALUES (bowlers.game_1_score), 
(bowlers.game_2_score), (bowlers.game_3_score)) AS value(v)) 
as TopScore FROM bowlers INNER JOIN teams ON 
bowlers.team_id=teams.team_id WHERE bowlers.sex = 'M' 
ORDER BY 'TopScore' DESC"; 

我不斷收到一個與它的錯誤,但。

「錯誤您的SQL語法錯誤;檢查對應於您的MySQL服務器版本正確的語法使用 附近的價值觀(bowlers.game_1_score),(bowlers.game_2_score)的手冊, (bowlers.g」在行......」

我在做什麼錯在這裏我怎樣才能讓這個代碼扳平房間裏

注:??MySQL的5.5

+1

我敢肯定你複製的這些倒錯之一,但你的代碼引用'保齡球'表和你的錯誤引用'bowlers_2016'表。 – tschwab

+0

你是對的...修復它。謝謝! – TMax

+1

如果你使用的是MySQL,那麼你應該看看你鏈接的問題的第二個最有幫助的答案。您使用的語法只適用於Microsoft Sql Server – Terminus

回答

2

您最初發布的代碼是爲T-SQL和SQL Server(SQL的Microsoft實現)編寫的。您正在運行MySQL,它有時具有不同的語法。正如Terminus指出的那樣,用於MySQL的東西是GREATEST函數。

爲了避免與至少一個NULL遊戲得分跳過行,你會結構中的查詢是這樣的:

SELECT bowlers.bowler_name, teams.team_name, 
GREATEST(
    IFNULL(bowlers.game_1_score, 0), 
    IFNULL(bowlers.game_2_score, 0), 
    IFNULL(bowlers.game_3_score, 0)) AS TopScore 
FROM bowlers 
INNER JOIN teams ON bowlers.team_id=teams.team_id 
WHERE bowlers.sex = 'M' 
ORDER BY 'TopScore' DESC 
+0

謝謝你,tschwab。不過,經過多次嘗試後,我發現GREATEST似乎沒有考慮具有空值的行。例如,具有高分的投球手,但對於game_3_score值爲'null'。有沒有辦法解決這些問題,仍然使用最高功能?這是我試圖讓「MAX」函數起作用的原因之一,因爲它似乎允許空值。 – TMax

+0

可以[這個答案](http://stackoverflow.com/a/2684184/1455074)工作? – tschwab

+1

我的歉意,那個答案只適用於兩列。我更新了我的答案。 – tschwab

相關問題