考虑下面的表格,我正在做行数据乘法:
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
。
答案 0 :(得分:2)
获取数字绝对值的乘积,最后乘以-1
或1
,具体取决于是否存在奇数或偶数的负数字:< / 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。