根据cate获取行号(MySql)

时间:2017-09-20 03:48:55

标签: mysql

我使用查询

获得以下表格和数据
SELECT b.*, (@rownum :=@rownum +1) AS row_number 
FROM notices b, (SELECT @rownum := 0 ) row

结果:

id  cate  rownumber
-------------------
1    5       1
2    5       2
3    6       3
4    5       4
5    5       5
6    5       6
7    5       7

我想在不使用row_number()或其他函数的情况下输出以下结果,因为我的rdbms不支持这些。

id  cate  rownumber
-------------------
1    5       1
2    5       2
3    6       1
4    5       3
5    5       4
6    5       5
7    5       6

1 个答案:

答案 0 :(得分:1)

要在MySQL中使用分区模拟ROW_NUMBER,您可以简单地引入另一个会话变量,以便在迭代cate中的记录时跟踪notices组值。

SET @rn = NULL;
SET @cate = NULL;

SELECT id, cate, rn
FROM
(
    SELECT
        @rn:=CASE WHEN @cate = cate THEN @rn + 1 ELSE 1 END AS rn,
        @cate:=cate,
        id,
        cate
    FROM notices
    ORDER BY
        cate, id
) t
ORDER BY cate, rn;

在这里演示:

Rextester