针对同一列中的另一个计算窗口函数

Posted

技术标签:

【中文标题】针对同一列中的另一个计算窗口函数【英文标题】:Calculate window function against another in same column 【发布时间】:2018-07-11 19:25:04 【问题描述】:

您好,我正在使用 SQL 服务器。我有一组数据,我正在尝试使用窗口函数来计算某些东西的实例。然后我再次运行窗口函数并将其与行计数窗口函数相除以尝试获得平均值。但是,我一直得到 0。是否可以针对同一列中的另一个运行窗口函数?

COUNT(city) OVER (partition by state)/Count(*) over (partition by total)*100 AS AVG

这样的事情可能吗?当我将它分开并单独运行时,它可以工作,但是当我将它们组合起来时,我在列中得到 0

【问题讨论】:

【参考方案1】:

这是因为整数运算——与窗口函数无关。写成:

COUNT(city) OVER (partition by state) * 100.0 / Count(*) over (partition by total) AS AVG

100.0 在算术中添加了一个小数点。所以,1/2 是 0。但 1.0/2 是 0.5。

【讨论】:

这行得通,您可以更详细地解释为什么移动 100 并添加小数点行得通吗? 数据类型。 10/3=3 因为数学恢复为整数除法。由于整数没有小数点,因此向下舍入为3。说10/3*1.0 仍然对SQL Server 说我们正在处理整数。它强制所有方面到3*1=3。但是,10*1.0/3 表示我们正在使用小数 >> 10.0/3=3.3......。你想要输出中的小数。使用数学变量时,您必须注意数据类型。如果一个变量可以从一种数据类型转换为另一种数据类型,它会在需要时转换。数学运算顺序显示*/ 从左到右。

以上是关于针对同一列中的另一个计算窗口函数的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 分析函数窗口化以查找列中的下一个值

如何忽略 PostgreSQL 窗口函数中的空值?或返回列中的下一个非空值

如何使用窗口函数更新表中的列

窗口函数:仅对另一列中的不同值求和

窗口函数,尝试从连接表中的列中按 created_at 排序而不分组

定义窗口并在多个分析列中使用它