添加行号时出现MYSQL错误

时间:2015-01-24 19:22:58

标签: mysql

我有这个sql

SET @rank:=0;

SELECT u.userid, a.referreid, c.avatar,c.avatarapproved, @rank:=@rank+1 AS rank , SUM( a.points ) as sum_points FROM 
ade39_alpha_userpoints_details AS a, ade39_alpha_userpoints as u ,ade39_findme as c 
WHERE (u.referreid = a.referreid) AND DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= a.insert_date 
AND (u.userid= c.user_id) AND (u.userid >0) 
GROUP BY a.referreid
 ORDER BY sum_points DESC LIMIT 200

它工作正常但是在为行号添加“等级”之后它是“不工作”=&gt;&gt;输出为空。当我删除“@rank:= @ rank + 1 AS rank”时,它正在工作

1 个答案:

答案 0 :(得分:0)

通常,您应该在select的字段列表中按所有未使用聚合函数的列进行分组。 MySQL能够很好地处理它,但它可能无法处理变量。 (请阅读手册MySQL Handling of GROUP BY部分下的更多内容。)

尝试将原始查询嵌入子查询中(但要注意顺序)。

SET @rank:=0;

SELECT @rank:=@rank+1 AS rank, * FROM (
  SELECT u.userid, a.referreid, c.avatar,c.avatarapproved, SUM( a.points ) AS sum_points
  FROM ade39_alpha_userpoints_details AS a,
       ade39_alpha_userpoints AS u,
       ade39_findme AS c 
  WHERE (u.referreid = a.referreid) AND
    DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= a.insert_date AND
    (u.userid= c.user_id) AND (u.userid >0) 
  GROUP BY a.referreid) T
ORDER BY sum_points DESC LIMIT 200