SQL Oracle中是否有功能允许在列分区上进行聚合乘法?

时间:2019-06-24 11:22:00

标签: sql oracle function aggregate

我想获得多个值的总和,对于某个列的特定值。因此,用简单的话来说,我希望值“ X”的集合与相同的列值“ Y”匹配

任何人都可以帮助解释情况或提出建议吗?

我尝试分别解决这两个问题,这很好,但是我采用的组合方法不起作用,导致错误:“ 00909. 00000-”无效的参数数目“错误。

如果将问题分成两个部分,则我所知的第一个问题是使用解决  exp(sum(ln(X)))

而第二个是由 function(X) over (partition by Y)

我的综合方法很简单:

(EXP (SUM( LOG(tbl.X) ) over (partition by tbl.Y)) )

所以是桌子


Y   X
______
a   2
a   2
b   3

对于新表,期望值为Z的期望输出应为:

Y   X   Z
__________
a   2   4
a   2   4
b   3   3

1 个答案:

答案 0 :(得分:3)

您希望使用LN( value )函数而不是LOG( base, value )函数:

Oracle查询

SELECT t.*,
       ROUND( EXP( SUM( LN( x ) ) OVER ( PARTITION BY y ) ) ) AS z
FROM   table_name t

输出

Y  |  X |  Z
:- | -: | -:
a  |  2 |  4
a  |  2 |  4
b  |  3 |  3

db <>提琴here

尽管您也可以通过指定基数来使用LOG

EXP( SUM( LOG( EXP(1), x ) ) OVER ( PARTITION BY y ) )