Oracle中的行数据乘法

时间:2019-08-26 16:59:11

标签: oracle oracle11g

考虑下面的表格,我正在做行数据乘法:

with v1 (member_id, the_number) as 
(
select 1, 3 from dual union all
select 1, 5 from dual union all
select 2, 2 from dual union all
select 2, 3 from dual union all
select 2, 4 from dual union all
select 3, 9 from dual union all
select 3, 3 from dual union all
select 3, 2 from dual
)
select member_id, EXP(SUM(LN(the_number))) from v1
GROUP BY member_id; 

它给出的正确结果为:

MEMBER_ID   EXP(SUM(LN(THE_NUMBER)))
1           15
2           24
3           54

当我在the_number列中输入负值时,出现以下Oracle错误:ORA-01428: argument 'x' is out of range这是因为LN ()参数的范围> 0。

如何修改查询,以便在the_number列中也可以具有负值?我正在使用Oracle 11g

1 个答案:

答案 0 :(得分:2)

获取数字绝对值的乘积,最后乘以-11,具体取决于是否存在奇数或偶数的数字:< / p>

select 
  member_id,
  CASE WHEN MOD(SUM(CASE WHEN the_number < 0 THEN 1 ELSE 0 END), 2) = 1 THEN -1 ELSE 1 END *
  EXP(SUM(LN(ABS(the_number)))) from v1
GROUP BY member_id; 

请参见demo