我正在尝试在 SQL select 子句中生成增量计数器(下面查询中的“rownum”列)。每次新用户切换时,计数器都应重新开始。
SELECT * FROM (
SELECT CONCAT(' ',g.node1,' ',g.node2),
@r:= CASE WHEN @g = g.`user` THEN @r +1 ELSE 1 END rownum,
@g:= g.`user` user_group
FROM sn.sn_graph_reduced g
CROSS JOIN (SELECT @g:=0,@r:=0) t2
ORDER BY `user` , RAND()
) t
WHERE rownum <= 100
但是,上面的代码片段返回行号,并且由于记录是随机采样的,所以行号不是递增的。 我需要的是为每一行返回的简单计数器 (1,2,3....)。 谢谢
最佳答案
尝试将变量放在内联 View 之外:
SELECT t.*,
@r:= CASE WHEN @t = t.`user` THEN @r +1 ELSE 1 END rownum,
@t:= t.`user` user_group
FROM (
SELECT CONCAT(' ',g.node1,' ',g.node2), g.`user`
FROM sn.sn_graph_reduced g
ORDER BY `user` , RAND()
) t
CROSS JOIN (SELECT @t:=0,@r:=0) t2
where rownum <= 100
关于MySQL简单行数增量计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25561419/