MariaDB基于进球数的球队排名SQL查询语法错误修复求助
解决MariaDB中RANK() OVER语法错误的问题
问题分析
你遇到的#1064语法错误,核心原因是你的MariaDB版本低于10.2——RANK() OVER这类窗口函数语法是从MariaDB 10.2版本才开始支持的,旧版本无法识别该语法。
错误提示:#1064 - 您的SQL语法有错误;请查看与您的MariaDB服务器版本对应的手册,了解在'OVER (ORDER BY Goals For DESC) GF'附近使用的正确语法。
解决方案
方案1:升级MariaDB版本
如果可以将MariaDB升级到10.2或更高版本,只需调整原查询中RANK与括号之间的空格(去掉多余空格),修正后的查询如下:
SELECT `League Id`, `Team Id`, `Goals For`, RANK() OVER (ORDER BY `Goals For` DESC) AS `GF` FROM `team_records` WHERE `League Id` = 0;
方案2:用子查询模拟排名(无需升级)
如果无法升级版本,可通过关联子查询模拟RANK()函数的排名逻辑(同分球队排名相同):
SELECT tr.`League Id`, tr.`Team Id`, tr.`Goals For`, (SELECT COUNT(DISTINCT `Goals For`) FROM `team_records` tr2 WHERE tr2.`League Id` = 0 AND tr2.`Goals For` > tr.`Goals For`) + 1 AS `GF` FROM `team_records` tr WHERE tr.`League Id` = 0 ORDER BY tr.`Goals For` DESC;
该查询通过统计同联赛中进球数高于当前球队的不同进球值数量,再加1得到当前球队的排名,和RANK()函数的逻辑完全一致。
内容的提问来源于stack exchange,提问作者pimpinhockey
相关产品推荐
相关产品推荐

