sql >> Databáze >  >> RDS >> Oracle

V dotazu CONNECT-BY se nezískává násobení celé řady (součin).

Co potřebujete, je kumulativní násobení. Ale neexistuje žádná taková funkce jako agregační nebo analytická funkce. Ale matematika nám říká, že násobení lze změnit na sčítání pomocí logaritmu .

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

Použijte to v SUM jako analytickou funkci. Není třeba používat konstrukci 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(sum(ln(rtnpct)) over (order by yr, yset rows between unbounded preceding and current row)) ccrfull
from Z_RETENTIONPCT
)
select * from recurreten
order by yr, yset

Výsledky :

|   YR | YSET | RTN_YEAR |  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. Oracle 9i, Oracle 10g a Oracle 11g Developer Suite Forms and Reports Tutorial

  2. SQL Pivot – Vědět, jak převést řádky na sloupce

  3. Přidání zalomení řádku do textu MySQL INSERT INTO

  4. Nainstalujte klienta Oracle Instant do kontejneru Docker pro Python cx_Oracle