sql - PostgreSQL - 将窗口函数分配给别名

标签 sql postgresql

我正在尝试将 ROW_NUMBER()... 设置为别名,以便我可以在 OFFSET 中引用它。例如OFFSET some_alias - 1。我需要从更大的查询中获取包含 ROW_NUMBER() 的一行。这是我的工作代码(获得正确的 ROW_NUMBER(),但没有被正确的数量抵消):

WITH FirstQuery AS (
    SELECT "RepInitials", COUNT("OrderStatus"), ROW_NUMBER()OVER(ORDER BY COUNT("OrderStatus") DESC)
    FROM "tblBulkSalesQuery"
    WHERE "OrderStatus" = 'CMC'
    GROUP BY "RepInitials"
)
SELECT "RepInitials", COUNT("OrderStatus"), ROW_NUMBER()OVER(ORDER BY COUNT("OrderStatus") DESC)
    FROM "tblBulkSalesQuery"
    WHERE "OrderStatus" = 'CMC'
    GROUP BY "RepInitials"
    LIMIT 1
    OFFSET 1;

最佳答案

select *
from (
    SELECT "RepInitials", 
           COUNT("OrderStatus") as order_status_count, 
           ROW_NUMBER() OVER (ORDER BY COUNT("OrderStatus") DESC) as rn
    FROM "tblBulkSalesQuery"
    WHERE "OrderStatus" = 'CMC'
    GROUP BY "RepInitials"
) as t
where rn = 1

编辑:

t 是嵌套选择(“派生表”)的别名。 PostgreSQL 要求每个派生表都有自己的“名称”,这只能通过分配别名来完成。

这几乎与:

with t as (
  ... here goes the real select ...
)
select *
from t 
where rn = 1;

关于sql - PostgreSQL - 将窗口函数分配给别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13566350/

相关文章:

postgresql - 将来自多行的 tsvectors 合并为一个

postgresql - Clojure - Postgres 找不到合适的驱动程序

postgresql - Ebean 不与 Play-2.5(OneToMany) 级联持久化

java - SQL Server 中不存在的 Oracle 日期时间

sql - T-SQL:更新记录集的第一行

sql - 如何使用SQL对不同日期进行分组?

postgresql - 在文本中查找日期和时间值,然后更新另一列

java - 我的executeUpdate() 工作,但未提交

mysql - 合并来自 MySQL 存储过程的结果

android - 将数据复制到新表时 NOT NULL 约束失败