我正在寻求帮助来计算我的曲棍球数据库的进球得分排名,以找出一支球队在联赛中进球得分类别的排名。我在这里text的答案中收到了一些很好的反馈,并且效果很好。
问题是当我上线并上传到我的虚拟主机时,他们只有 MySQL 版本 5.7,而窗口函数只能在 8.0 中运行。我尝试过在这个网站上看到的其他选项来使用变量@rank进行排名,但当我不得不加入另一个数据表时遇到了问题。
我必须选择什么选项来连接 2 个数据表并根据进球数对联赛中的球队进行排名?
我在 XAMPP 上使用 MySQL 8 的初始代码是
$sql = "SELECT
`TeamId`,
`League Id,
`GP`,
`G`,
(`G`) / (`GP`) `GF`,
RANK() OVER(
PARTITION BY `League Id`
ORDER BY
`GF`) Rank
FROM
`team_stats`
INNER JOIN `team_data` ON `team_data`.`TeamId` = `team_stats`.`TeamId`
WHERE
`League Id` = 0;
我还使用了以下内容,当我在当前的 Web 主机 MySQL 版本 5.7 上运行它时,它起作用了,但是当我将 sql 查询放入我的 php 代码中时,它失败了,因为它读取为 2 个不同的语句。
SET @rank=0;
SELECT *, (`G`) / (`GP`) GF, @rank:=@rank+1 AS Rank
FROM `team_stats`
INNER JOIN `team_data` ON `team_data`.`TeamId` = `team_stats`.`TeamId`
WHERE `League Id` = 0
ORDER BY `GF` DESC;
连接 2 个表并对结果进行排名的最佳方式是什么?如果我需要添加更多信息,请告诉我,因为这对我来说是全新的?
我正在寻找能让我得到这个的结果
我的目标 php 结果是这样的。 在此输入图片描述
因为它读作两个不同的陈述
您可以将它们组合成单个语句:
SELECT *, (`G`) / (`GP`) GF, @rank:=@rank+1 AS Rank
FROM `team_stats`
INNER JOIN `team_data` ON `team_data`.`TeamId` = `team_stats`.`TeamId`
CROSS JOIN (SELECT @rank := 0) AS init_variable
WHERE `League Id` = 0
ORDER BY `GF` DESC;