[英]SQL Error When Selecting Max Value from Multiple Columns in Tables
我有一张满是个人保龄球比赛个人保龄球得分的表(表:bowlers)。 我正在尝试在可能的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')附近使用。 ..”
我在这里做错了什么? 如何使此代码将房间捆绑在一起?
注意:MySQL 5.5
您最初发布的代码是为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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.