繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM