mysql 分组加行号

mysql示例

SELECT
                case when @currentid <> t.id then @rownum :=1 else @rownum :=@rownum + 1 end AS row_num,
                case when @currentid <>  t.id then @currentid := t.id else @currentid end AS row_num,
                ID,

            FROM
                table t,
                (SELECT @rownum := 0) r,
                (SELECT @currentid := '') c
            ORDER BY
                t.id,
                t.name DESC

mysql中没有row_number() over,可以使用曲线救国的方法来解决。

1、我们先按要分组的字段排序(id)。

2、我们定义两个变量一个@rownum作为行号,@currentid作为分组号。

3、case 分组号和当前的要分组的字段比较。

4、上面的两个case的位置不能变,否者就会失效

oracle示例

SELECT
	ROW_NUMBER() OVER(
		PARTITION BY id
	ORDER BY
		id DESC
	) AS ROWNUM,
	t.id
FROM
	table t
posted @ 2024-05-22 10:50  鲸鱼zhang  阅读(139)  评论(0编辑  收藏  举报