繁体   English   中英

SQL,在where条件后如何防止行号重置

[英]SQL, how to prevent row number reset after where condition

我有这个查询:

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;

产生这个结果:

结果 .

现在,我想过滤结果表,例如我只看到第 2/3/4 行:

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 行,但将 1/2/3 作为 row_num 而不是 2/3/4。 结果 2

我该怎么做才能看到我在第一个查询中看到的行号? 提前致谢。

您正在对外部查询而不是内部查询执行第二次行号计算。 所以它返回过滤查询中的行数。 您应该使用以下代码:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM