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

标签 php mysql

我有一张表格,里面全是慈善保龄球锦标赛的个人保龄球得分(表格: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/

相关文章:

php - Codeigniter模型: summary,在多个表中加入、分组

mysql - 计算列中每个值的所有出现次数

php - MySQL - 以分钟为单位获取超过一个小时的时间值

mysql - 配置 SHA-256 身份验证 MySQL

mysql - 数据库表结构

php - 在php中使用存储过程哪个是最好的mysql连接方法?

php pdo emulate_prepares false stringify_fetches false int 仍然是字符串

php - 如何在 laravel eloquent 中为左连接表添加别名

php - 使用 HTML 表单隐藏元素传递数组

php - 使用 mysql 数据库在 php 中使用空值创建新行