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';
相關文章
相關標籤/搜索