我有一张桌子,里面有个人保龄球比赛(桌子:保龄球),用于举办慈善保龄球锦标赛。我试图在可能的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
答案 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