我有一个SQL代码,用于根据赢得的比赛和播放的比赛计算排行榜的排名:
SELECT count(1)
FROM `account`
WHERE points < SELECT points FROM (SELECT `display name`, 3*`wins`-`matches played` AS points FROM `account`) AS T WHERE `display name` = "valaki"
如果我更改了胜利点或任何现有字段,那么不等式的左边部分正在工作,左边部分也有效,但代码不起作用。
答案 0 :(得分:1)
您需要在子查询周围使用括号:
SELECT count(1)
FROM account a
WHERE a.points < (SELECT 3*a2.wins-a2.matchesplayed AS points
FROM account a2
WHERE a2.displayname = 'valaki'
);
此外,您将列称为matches played
和diplay name
。这是不正确的。您需要使用空格在列名称周围转义字符。我的建议是修改列名,这样就不需要对它们进行转义。
我还添加了表别名。这是一个好习惯。如果查询引用多个表或具有多个FROM
子句,它们确实应该是必需的。