MySQL中row_number()的实现,查询记录排序行数

发布时间 2023-09-21 14:34:40作者: 漫思

MySQL中row_number()的实现,查询记录排序行数

 

 在MySQL 8.0之前是有没row_number()这个窗口函数的,若是想实现此功能就须要经过临时变量来计算,如下是一个简单的应用。sql

SELECT
	t.rn
FROM
(
	SELECT
		sentry_code,
		( SELECT @rownum := @rownum + 1 FROM (SELECT @rownum := 0) r ) AS rn
	FROM
		t_integral
	WHERE
		sentry_code LIKE '99%'
	ORDER BY
		all_amount DESC
) t
WHERE
	t.sentry_code = '99S10002';

其中最关键的一句就是获取到行数,要确保变量赋初始值0,否则会致使行数每次都是1的状况。函数

SELECT @rownum := @rownum + 1 FROM (SELECT @rownum := 0) r

在MySQL 8.0版本就能够像Oracle和SQLServer同样直接使用row_number()这个窗口函数直接计算。code

SELECT
	t.rn
FROM
	(
		SELECT
			sentry_code,
			row_number () over (ORDER BY all_amount DESC) rn
		FROM
			t_integral
		WHERE
			sentry_code LIKE '99%'
	) t
WHERE
	t.sentry_code = '99S10002';