Postgresql中按窗口函数结果过滤

2024-01-10

好吧,最初这只是我们和朋友开的一个玩笑,但后来变成了有趣的技术问题:)

我有以下内容stuff table:

CREATE TABLE stuff
(
    id serial PRIMARY KEY,
    volume integer NOT NULL DEFAULT 0,
    priority smallint NOT NULL DEFAULT 0,
);

该表包含我所有物品的记录,以及各自的数量和优先级(我需要多少)。

我有一个指定容量的袋子,比如说1000。我想从桌子上选择所有可以放入袋子的东西,首先包装最重要的东西。

这似乎是使用窗口函数的情况,所以这是我提出的查询:

select s.*, sum(volume) OVER previous_rows as total
 from stuff s
 where total < 1000
 WINDOW previous_rows as
  (ORDER BY priority desc ROWS between UNBOUNDED PRECEDING and CURRENT ROW)
 order by priority desc

然而,它的问题是 Postgres 抱怨:

ERROR:  column "total" does not exist
LINE 3:  where total < 1000

如果我删除此过滤器,总列会得到正确计算,结果会正确排序,但是all东西被选择了,这不是我想要的。

那么,我该怎么做呢?如何只选择可以放入包中的物品?


我不知道这是否符合“更优雅”的条件,但它的编写方式与 Cyber​​nate 的解决方案不同(尽管本质上是相同的)



WITH window_table AS 
( 
   SELECT s.*, 
          sum(volume) OVER previous_rows as total
   FROM stuff s
   WINDOW previous_rows as 
        (ORDER BY priority desc ROWS between UNBOUNDED PRECEDING and CURRENT ROW)
) 
SELECT * 
FROM window_table
WHERE total < 1000
ORDER BY priority DESC 
  

如果“更优雅”意味着避免子选择,那么答案是“否”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postgresql中按窗口函数结果过滤 的相关文章

随机推荐

  • 如何在 C# 中将 XMLSerialize 用于 Enum 类型属性?

    我有一个简单的枚举 enum simple one two three 我还有一个具有 type 属性的类simple 我尝试用以下属性装饰它 XmlAttribute DataType int 但是 当我尝试使用序列化它时 它失败了Xml
  • 错误:连接失败(没有到主机的路由)

    上下文 我有一个 Xamarin Android 应用程序 它连接到 WebAPI 以获取不同的信息 问题 尝试访问服务器时出现以下错误 System Net Http HttpRequestException 发送请求时发生错误 gt S
  • 当文本字段为空时,如何在 Xcode UI 测试中测试 UITextField?

    我正在做一个UITest在 Xcode 中 当我记录测试时 它工作正常 但当我运行测试时 它会出现错误 这些是发生错误的代码行 XCUIElement clearTextTextField app textFields containing
  • 在本地 html 文件中使用 JavaScript 设置 Cookie

    我有以下目录树 folder1 folder2 page1 html page2 html 如果我设置一些cookiepage1 html使用 JavaScript 该 cookie 使用的路径是什么 Edit 让我更好地解释一下 我正在处
  • 最佳匹配:错误警告,但输出看起来不错

    我通过 MatchIt 和 optmatch 包执行了最佳匹配 library MatchIt library optmatch data lalonde optimal lt matchit treat age educ black da
  • ionic 2 错误 cordova 不可用

    我正在尝试在新的 ionic 2 项目 最新的 ionic2 版本 中使用 cordova GooglePlus 插件 但我总是遇到有关 cordova 的错误 该插件已正确安装并显示在插件文件夹中 我尝试过的一种方法是 import Go
  • jQuery Fancybox 无法识别元素

    a href https xenogamers org attachment php attachmentid 3655 d 1350682390 img class thumbnail border 0 alt Click image f
  • 将列表的控制台输出转换为真正的 R 列表

    有人刚刚发布了一些控制台输出作为示例 这种情况经常发生 我有将打印输出转换为向量和数据帧的策略 我想知道是否有人有一种优雅的方法将其解析为真正的 R 列表 test lt 1 1 1 0000 1 9643 4 5957 2 1 1 000
  • 定义自定义管道运算符时出现不明确的警告

    在我的过程中我需要执行很多dplyr inner joins 我想我可以为它定义一个自定义管道运算符 如所解释的here https stackoverflow com questions 47475923 custom pipe to s
  • 如何在 iOS 中使用 CIFilter?

    苹果表示 CIFilter 可在 iOS 中使用 但是 在我的 Mac 上 我找不到可链接的 CoreImage 框架 过滤器 可选的核心图像过滤器 提供转换的对象 property 保留 CIFilter 过滤器 即 当我尝试执行类似操作
  • 删除 Plotly 中条形图之间的间隙

    我正在尝试使用 Plotly 在 R 中创建 Marimekko 图表 本质上 这只是一个堆叠的 可变宽度的条形图 两个条形直接相邻 目前 我的尝试如下 创建它的代码在这里 bar test lt plot ly type bar gt l
  • 避免在泛型方法中强制转换为 Nothing

    scala gt def foo U t Any t asInstanceOf U foo U t Any U scala gt val s String foo hi scala gt val n foo hi java lang Cla
  • Spark数据帧过滤器

    val df sc parallelize Seq 1 Emailab 2 Phoneab 3 Faxab 4 Mail 5 Other 6 MSL12 7 MSL 8 HCP 9 HCP12 toDF c1 c2 c1 c2 1 Emai
  • 运算符“+”不能应用于“字符串”和“方法组”类型的操作数[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在检查是否存在包含以下代码的目录 while Directory Exists currentDirectory year T
  • 使用 PL/SQL 创建 Excel 文件 (.xlsx)

    关于我之前的问题返回显式游标的SQL语句 https stackoverflow com questions 41281665 return the sql statement of an explicit cursor 我能够生成 Exc
  • Vue.js v-if 用于属性

    假设我有这个代码 table my attr value complex component Jade 我想渲染它my attr基于传递到组件中的属性 由于 v if 适用于整个元素 我不能做类似的事情 table my attr valu
  • jQuery - 使全局变量可用于多个插件

    我正在为网站创建一组 jQuery 插件 所有这些插件都有共同的功能 即调用 getJSON 这些调用中传递的 URL 根据开发 QA 和生产环境而有所不同 我想将 URL 存储在一个中心位置 以便可以轻松更改 URL 应该存储在哪里 我不
  • 根据 URL / 锚点更改 Facebook 元数据

    我在输入问题时发现对此进行了小型交流将 URL 哈希添加到 Facebook 和 Twitter 共享卡的元数据中 https stackoverflow com questions 16014439 adding a url hash i
  • 是否可以在 Mirror API 中注册顶级意图?

    例如 顶级操作 是 Google 拍照 等 是否可以使用 Mirror API 来注册自定义顶级事件 好吧 格拉斯 咬碎我吧 我的第二个问题是是否可以获取用户语音 使用 OK Glass Google 示例 用户说出 Google 接受并执
  • Postgresql中按窗口函数结果过滤

    好吧 最初这只是我们和朋友开的一个玩笑 但后来变成了有趣的技术问题 我有以下内容stuff table CREATE TABLE stuff id serial PRIMARY KEY volume integer NOT NULL DEF