使用WHERE子句在MySQL中排名

时间:2014-08-10 13:55:08

标签: mysql

我的数据库表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行。 你能帮我吗

1 个答案:

答案 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是数字,所以我删除了单引号。