我的数据库表gainfinal由三列组成;国家代码,年份和价值观。我想根据选择year = 2000的所有值的值对国家/地区代码进行排名。 查询是这样的:
SELECT `countrycode` , `values` ,
@curRank := @curRank + 1 AS rank
FROM `gainfinal` , SELECT @curRank := 0) r
WHERE `year` = '2000'
ORDER By `values`
它说:#1064 - 你的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在#{SELECT}附近使用正确的语法:@curRank:= 0)r WHERE year
=' 2000'订单values
LIMIT 0,30'在第3行。
你能帮我吗
答案 0 :(得分:1)
您需要额外的括号:
SELECT countrycode, `values`,
@curRank := @curRank + 1 AS rank
FROM gainfinal CROSS JOIN
(SELECT @curRank := 0) vars
WHERE year = 2000
ORDER By `values`;
您应该在from
子句中避免使用逗号。因此,这会改为使用cross join
。
另外。您只需要转义具有异常字符(例如空格)或保留字(例如values
)的标识符。我的建议是避免使用这些标识符。因此,我建议您将values
的名称更改为更安全的内容。
此外,您应该只对字符串和日期常量使用单引号。我假设year
是数字,所以我删除了单引号。