重置子查询中的变量

时间:2015-10-24 18:26:40

标签: mysql sql

如果我可以在查询中递增变量以附加排名列:

SET @i = 0;
SELECT *, @i:=@i+1 AS rank FROM table WHERE column="value" ORDER BY time;

如何将此作为所有唯一column值的子查询执行?我认为真正的问题是重置变量。

1 个答案:

答案 0 :(得分:1)

如果您想为每列增加一个数字(在大多数其他数据库中以row_number()的方式),您仍然可以使用变量:

  SELECT t.*,
         (@i := if(@c = column, @i + 1,
                   if(@c := column, 1, 1)
                  )
         ) as rank
  FROM table t CROSS JOIN
       (SELECT @i := 0, @c := '') params
  ORDER BY column, time;