【问题标题】:Is there a function in SQL Oracle allowing for an aggregate multiplication over a column partition?SQL Oracle 中是否有允许在列分区上进行聚合乘法的函数?
【发布时间】:2019-11-06 04:44:03
【问题描述】:

我想获得某个列的特定值的多个值的聚合乘法。所以简单来说,我想要一组值 '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

【问题讨论】:

  • 当你使用函数ln而不是log时,它可以工作。
  • 您可以随时为此编写自己的聚合。
  • 感谢 cmets,它与 ln 合作

标签: sql oracle function aggregate


【解决方案1】:

您想要LN( value ) 函数而不是LOG( base, value ) 函数:

Oracle 查询

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

输出

是 | X | Z :- | -: | -: 一个 | 2 | 4 一个 | 2 | 4 乙 | 3 | 3

db小提琴here

虽然您也可以通过指定基数来使用LOG

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-17
    • 2015-10-29
    • 2021-03-10
    • 2011-06-20
    • 2011-07-10
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多