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;
产生这个结果:
.
现在,我想过滤结果 table 例如,我只看到第 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;
问题是此查询 returns 这 3 行,但将 1/2/3 作为 row_num 而不是 2/3/4。
如何查看在第一个查询中看到的行号?提前致谢。
您正在对外部查询而不是内部查询执行行号的第二次计算。所以它 returns 过滤查询中行的行数。您应该使用此代码:
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;
我有这个查询:
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;
产生这个结果:
现在,我想过滤结果 table 例如,我只看到第 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;
问题是此查询 returns 这 3 行,但将 1/2/3 作为 row_num 而不是 2/3/4。
如何查看在第一个查询中看到的行号?提前致谢。
您正在对外部查询而不是内部查询执行行号的第二次计算。所以它 returns 过滤查询中行的行数。您应该使用此代码:
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;