在SQL中,如何防止where条件后重新设置行号?

问题描述 投票:0回答:1

我有这样一个查询。

SELECT ROW_NUMBER() OVER (ORDER BY total_votes desc, views desc, date desc, time desc) AS rn,
name, date, time, subject, full_address, views, total_votes, user_email, typology_name
FROM photo
ORDER BY total_votes desc, views desc, date desc, time desc;

产生了这样的结果:

result.

现在,我想过滤结果表,例如我只看到234行。

SELECT ROW_NUMBER() OVER(ORDER BY total_votes desc, views desc, date desc, time desc) AS row_num,
name, date, time, subject, full_address, views, total_votes, user_email, typology_name
FROM(
SELECT *, ROW_NUMBER() OVER (ORDER BY total_votes desc, views desc, date desc, time desc) AS rn
FROM photo) q
WHERE rn >= 2 AND rn <= 4 
ORDER BY total_votes desc, views desc, date desc, time desc;

问题是这个查询返回了这3行,但把123作为行号而不是234。result 2

我可以怎么做才能看到我在第一个查询中看到的行号?先谢谢你。

mysql sql select row-number
1个回答
1
投票

你是在外层查询上执行行数的第二种计算,而不是内部查询。所以它返回的是过滤查询中的行数。你应该使用这段代码。

SELECT rn, name, date, time, subject, full_address, views, total_votes, user_email, typology_name
FROM(
SELECT *, 
ROW_NUMBER() OVER (ORDER BY total_votes desc, views desc, date desc, time desc) AS rn
FROM photo) q
WHERE rn >= 2 AND rn <= 4 
ORDER BY total_votes desc, views desc, date desc, time desc;
© www.soinside.com 2019 - 2024. All rights reserved.