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

问题描述

以下在 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,ROW_NUMBER () OVER (ORDER BY product_name)
        FROM
            products
     
WHERE
    ROW_NUMBER BETWEEN 6 AND 10;

解决方法

因为像 row_number() 这样的窗口函数被应用于查询的 result(在你的情况下是内部的),即 after { {1}} 子句(不是语句)已经生效。