问题标签 [window-functions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - 在视图中封装 Postgres 查询使其非常慢
我有一个在 Postgres 8.4 上运行大约 5 秒的查询。它从连接到其他一些表的视图中选择数据,但也使用lag()窗口函数,即。
为方便起见,我创建了一个简单的新视图
然后从中选择,像以前一样使用所有其他 JOIN 和过滤器。令我惊讶的是,这个查询没有在 12 分钟内完成(我当时停止了它)。显然 Postgres 选择了不同的执行计划。我如何让它不这样做,即。使用与原始查询相同的计划?我原以为视图不应该改变执行计划,但显然它确实如此。
编辑:更重要的是,我发现即使我将第一个视图的内容复制到第二个视图中,它仍然不会返回。
编辑 2:好的,我已经充分简化了查询以发布计划。
使用视图(这不会在任何合理的时间内返回):
将窗口函数从视图中取出并放入查询本身(立即返回):
因此,在缓慢的情况下,它似乎首先尝试将窗口函数应用于所有数据,然后对其进行过滤,这可能是问题所在。不过,我不知道它为什么会这样做。
sql - 在更新语句中使用窗口函数
我有一个通过 Django 访问的大型 PostgreSQL 表。因为 Django 的 ORM 不支持窗口函数,所以我需要将窗口函数的结果作为常规列烘焙到表中。我想做这样的事情:
但我明白了ERROR: cannot use window function in UPDATE
任何人都可以提出另一种方法吗?通过 Django 的 .raw() 方法传递窗口函数语法是不合适的,因为它返回一个 RawQuerySet,它不支持我需要的进一步的 ORM 功能,例如 .filter()。
谢谢。
sql - 在 Postgresql 中按窗口函数结果过滤
好的,最初这只是我们和我的一个朋友开的一个玩笑,但它变成了有趣的技术问题 :)
我有下stuff
表:
该表包含我所有东西的记录,以及相应的数量和优先级(我需要多少)。
我有一个指定体积的包,比如说1000
。我想从表中选择我可以放入袋子的所有东西,首先将最重要的东西打包。
这似乎是使用窗口函数的情况,所以这是我提出的查询:
然而,它的问题在于 Postgres 抱怨:
如果我删除此过滤器,总列会得到正确计算,结果会正确排序,但所有内容都会被选中,这不是我想要的。
那么,我该怎么做呢?如何只选择可以放入包中的物品?
sql - 列在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中
我在下面有 sql 查询,但执行时遇到问题。
但我不断收到以下错误:
选择列表中的“FloorId”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
sql - 过滤器最大值 rn
如何在此处过滤 rn 的最大值
在它的归档之上rn = 1
我要过滤rn = max(rn)
signal-processing - 汉明窗有什么用?
我正在使用一些执行傅里叶变换的代码(计算音频样本的倒谱)。在计算傅里叶变换之前,它将汉明窗应用于样本:
为什么要这样做?我在代码中或在线找不到任何理由这样做。
sql - Oracle 中分页查询的速度
这对我来说是一个永无止境的话题,我想知道我是否可能忽略了一些东西。本质上,我在应用程序中使用两种类型的 SQL 语句:
- 具有“回退”限制的常规查询
- 排序和分页查询
现在,我们正在讨论对具有数百万条记录的表的一些查询,并与另外 5 个具有数百万条记录的表相连接。显然,我们几乎不想获取所有这些,这就是为什么我们有上述两种方法来限制用户查询。
案例1非常简单。我们只是添加了一个额外的ROWNUM
过滤器:
这是相当快的,因为 Oracle 的 CBO 会在其执行计划中考虑这个过滤器,并且可能会应用一个FIRST_ROWS
操作(类似于/*+FIRST_ROWS*/
提示强制执行的操作。
但是,情况 2对 Oracle 来说有点棘手,因为没有LIMIT ... OFFSET
其他 RDBMS 中的子句。因此,我们将“业务”查询嵌套在技术包装器中,如下所示:
请注意,TOTAL_ROWS
即使没有获取所有数据,该字段的计算也是为了知道我们将拥有多少页。现在这个分页查询通常是相当令人满意的。但是时不时地(正如我所说,在查询 5M+ 记录时,可能包括非索引搜索),这会运行 2-3 分钟。
编辑:请注意,潜在的瓶颈不是那么容易规避的,因为必须在分页之前应用排序!
我想知道,是最先进的 模拟LIMIT ... OFFSET
,包括TOTAL_ROWS
在 Oracle 中,还是有更好的解决方案,在设计上会更快,例如通过使用ROW_NUMBER()
窗口函数而不是ROWNUM
伪列?
sql - H2 数据库是否能够使用聚合函数对 over 子句进行 SQL 查询?
像这样的SQL
非常有用。
我只是想知道在H2中,我们如何实现类似的功能?也许创建一个java程序会起作用。但是这个功能会在 H2 数据库的路线图中吗?
mysql - MySql 对 over 子句使用正确的语法
让 over 子句在 mysql 中工作的正确语法是什么?
我想查看每个用户发送的短信总数,而不用 group by 子句分组。