我有一张表格,里面全是慈善保龄球锦标赛的个人保龄球得分(表格: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";
不过,我总是遇到错误。
"Error You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VALUES (bowlers.game_1_score), (bowlers.game_2_score), (bowlers.g' at line..."
我在这里做错了什么?我怎样才能让这段代码把房间联系在一起?
注: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
关于php - 从表中的多个列中选择最大值时出现 SQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39584688/