PostgreSQL 14中窗口范围内的舍入函数

ttvkxqim  于 2023-05-17  发布在  PostgreSQL
关注(0)|答案(2)|浏览(110)

我找不到一个很好的例子来说明如何对窗口函数进行内联。在下面的例子中,我已经尝试将Round函数放在任何地方(除了正确的地方)。价格是双倍的。如何在avg等运算符的窗口结果上内联Round函数?
在本例中,nine_day_avg应舍入为两位数。

SELECT quote_date,price, 
       avg(price)
       OVER(ORDER BY  quote_date ROWS BETWEEN 8 PRECEDING AND CURRENT ROW) AS nine_day_avg   
       FROM quote_datas
       where symbol = 'A'
       order by quote_date desc
2ekbmq32

2ekbmq321#

您可以使用ROUND (source [ , n ] )作为

source is a number or a numeric expression that is to be rounded
n is an integer that determines the number of decimal places after rounding

**注意:**n是可选的,如果省略,默认值为0。

您必须将要舍入的值转换为数字,才能使用上面提到的round版本。

SELECT quote_date, price, 
round(avg(price::numeric) OVER(ORDER BY quote_date ROWS BETWEEN 8 PRECEDING AND CURRENT ROW), 2) AS nine_day_avg
FROM quote_datas where symbol = 'A' order by quote_date desc
pcww981p

pcww981p2#

您只需要将round函数应用于整个avg()窗口列名,包括over子句。所以它可以如下-

SELECT quote_date,price, 
       round(avg(price) OVER(ORDER BY  quote_date ROWS BETWEEN 8 PRECEDING AND CURRENT ROW),2)
 AS nine_day_avg   
       FROM quote_datas
       where symbol = 'A'
       order by quote_date desc

相关问题