在 Postgres 的 WHERE 语句中使用 ROW_NUMBER() 函数

Using ROW_NUMBER() Function in a WHERE statement in Postgres

Postgres 中的以下作品:

SELECT
    *
FROM
    (
        SELECT
            product_id,
            product_name,
            price,
            ROW_NUMBER () OVER (ORDER BY product_name)
        FROM
            products
    ) x
WHERE
    ROW_NUMBER BETWEEN 6 AND 10;

我的问题是为什么以下更简单的尝试不起作用?

        SELECT
            product_id,
            product_name,
            price,
            ROW_NUMBER () OVER (ORDER BY product_name)
        FROM
            products
     
WHERE
    ROW_NUMBER BETWEEN 6 AND 10;

因为 window 函数(如 row_number())应用于查询的 结果(在您的情况下是内部结果),即 之后WHERE子句(不是声明)已经生效。