我很慷慨地给出了这个代码建议来获得每个人的得分排名,有没有办法在不使用分号的情况下声明var?我发现了一种在查询中声明的方法,但在使用如下的子查询时我无法使其工作:
SET @rank := 0;
SELECT a.name,
a.AvScore,
@rank := @rank + 1
FROM (SELECT name,
Avg(score) AS AvScore
FROM results
GROUP BY name) a
ORDER BY a.AvScore
答案 0 :(得分:4)
尝试就好了
SELECT a.name,
a.AvScore,
@rank := @rank + 1
FROM (SELECT name,
Avg(score) AS AvScore ,(SELECT @rank :=0) v
FROM results
GROUP BY name) a
ORDER BY a.AvScore
答案 1 :(得分:1)
如果您想更改分隔符(例如更改为//
之类的内容),您应该这样做:
mysql> delimiter //
mysql> SET @rank := 0 //
MySQL需要一个分隔符标识,以便它能够分隔你的多个句子,否则它也可以是一个不适用于约束规则检查正确语法的单个句子。
<强>更新强>
作为对评论的回应(OP有兴趣从同一语句执行一次多个查询),虽然我不熟悉PHP,并且有addBatch
方法可以执行多个quires for JDBC单一陈述,
似乎在php mysqli->multi_query
中也是如此。
对于所提出的案例,@ echo_me提出了一个优雅的解决方案,以避免多个查询,对于其他人,你应该考虑multi_query。