MySQL 5.7 版本中的 SQL Rank 函数

问题描述 投票:0回答:1

我正在寻求帮助来计算我的曲棍球数据库的进球得分排名,以找出一支球队在联赛中进球得分类别的排名。我在这里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 结果是这样的。 在此输入图片描述

php mysql rank
1个回答
0
投票

因为它读作两个不同的陈述

您可以将它们组合成单个语句:

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;
© www.soinside.com 2019 - 2024. All rights reserved.