MySQL简单行数增量计数器
我试图在下面的查询中,在SQL select子句中生成一个增量计数器列“rownum”。每次新用户切换时,计数器都应重新启动MySQL简单行数增量计数器,mysql,sql,random,row-number,Mysql,Sql,Random,Row Number,我试图在下面的查询中,在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_redu
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。。。。对于返回的每一行。
谢谢尝试将变量置于内联视图之外:
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
增加行数的方法不能直接处理RAND,所以使用RAND中的值作为列。也可以将@g初始化为非零,然后您需要一个最终订单
SELECT
*
FROM (
SELECT
CONCAT(' ', g.node1, ' ', g.node2) AS node_concat
, @r:= IF(@g = g.`user`, @r + 1, 1) AS rownum
, @g:= g.`user` AS user_group
FROM (
SELECT *, rand() AS R FROM sn_graph_reduced
) g
CROSS JOIN ( SELECT @g:= '' ,@r:= 1 ) t2
ORDER BY
`user`
, R
) t
WHERE rownum <= 100
ORDER BY
user_group
, rownum
;
请参阅:计数器显示得很好,但查询只返回第一个用户的100条记录,其中有27个用户,因此我预计为2700条records@user3628777请尝试我的编辑,抱歉,我认为where rownum的用途没有问题,我发现如果将行计算与rand结合起来,它就不能像您预期的那样工作。你觉得没问题吧?打勾总是很好的: