Oracle
 sql >> база данни >  >> RDS >> Oracle

Не се получава пълно умножение на серия (продукт) в заявката CONNECT-BY

Това, от което се нуждаете, е кумулативно умножение. Но няма такава функция нито като агрегатна, нито като аналитична функция. Но математиката ни казва, че умножението може да се промени на събиране чрез логаритъм .

a * b =exp(ln(a) + ln(b)) 

Използвайте това в SUM като аналитична функция. Няма нужда да използвате конструкция CONNECT BY.

SQL Fiddle

recurreten as(select YR, YSet, rtnpct rtn_year, round(exp(sum(ln(rtnpct)) over (order by yr, yset rows between unbounded preceding and current row)),2) ccr, exp (сума(ln(rtnpct)) над (подреждане по година, yset редове между неограничен предходен и текущ ред)) ccrfullfrom Z_RETENTIONPCT)изберете * от повтарящ се ред по година, yset 

Резултати :

<предварителен код>| YR | YSET | RTN_ГОДИНА | CCR | CCRFULL ||------|------|----------|------|--------------- -|| 1998 | 20 | 0,84766 | 0,85 | 0,84766 || 1999 | 21 | 0,77941 | 0,66 | 0,6606746806 || 2000 | 22 | 0,78659 | 0,52 | 0,519680097013 || 2001 | 23 | 0,76879 | 0,4 | 0,399524861783 || 2002 | 24 | 0,80952 | 0,32 | 0,32342336611 || 2003 | 25 | 0,76316 | 0,25 | 0,246823776081 || 2004 | 26 | 0,82425 | 0,2 | 0,203444497435 || 2005 | 27 | 0,6992 | 0,14 | 0,142248392606 || 2006 | 28 | 0,77071 | 0,11 | 0,109632258666 || 2007 | 29 | 0,702 | 0,08 | 0.076961845583 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да експортирате-импортирате база данни в Oracle 11g (Application Express Edition)?

  2. Труден проблем ГРУПИРАНЕ ПО на ORACLE

  3. Възможно ли е да управлявате база данни на oracle с flyway?

  4. как да декларирам SQLCA.SQLERRD?

  5. Защо свързване чрез израз в FOR цикъл се изпълнява само веднъж?