从表中的多个列中选择最大值时出现SQL错误

时间:2016-09-20 02:10:00

标签: php mysql

我有一张桌子,里面有个人保龄球比赛(桌子:保龄球),用于举办慈善保龄球锦标赛。我试图在可能的3场保龄球比赛中为男性和女性取得最高的个人得分,将他们与来自不同表格(桌子:球队)的球队名称联系起来,然后按降序排列最高分数顺序。

我从男性得分开始并且有一个SQL查询,我认为应该可以在他们可能的三个游戏中为每个人选择最高分,然后按降序排列所有记录。我基于Stack Overflow上的类似问题找到答案: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服务器版本对应的手册,以获得正确的语法   靠近' VALUES(bowlers.game_1_score),(bowlers.game_2_score),   (bowlers.g' at line ..."

我在这里做错了什么?我怎样才能让这段代码与房间联系在一起?

注意:MySQL 5.5

1 个答案:

答案 0 :(得分:2)

您最初发布的代码是为T-SQL和SQL Server(Microsoft的SQL实现)编写的。您正在运行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