1 Analytische functies 18 mei 2005
2 Onderwerpen Introductievoorbeeld Kenmerken / achterliggende gedachten Syntax Praktijkvoorbeelden
3 Introductievoorbeeld Toon mij van iedere medewerker -zijn naam -de afdeling waarin hij werkzaam is -zijn salaris -het cumulatieve salaris per afdeling -percentage van salaris binnen de afdeling -percentage van salaris binnen het bedrijf gesorteerd op afdeling en salaris af1a.sql af1b.sql af1c.sql
4 Kenmerken Sinds Weinig gebruikt, toch erg krachtig Lijken soms op bekende aggregatie- functies SUM, COUNT, MAX e.d. …maar aggregeren niet voorkomen meerdere benaderingen van dezelfde tabel, b.v. self joins af2.sql
5 Overzicht Denk niet in rijen … EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO CLARK MANAGER KING PRESIDENT MILLER CLERK ADAMS CLERK FORD ANALYST JONES MANAGER SCOTT ANALYST SMITH CLERK ALLEN SALESMAN BLAKE MANAGER JAMES CLERK MARTIN SALESMAN TURNER SALESMAN WARD SALESMAN FORD ANALYST
6 Overzicht … maar in verzame- lingen EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO CLARK MANAGER KING PRESIDENT MILLER CLERK ADAMS CLERK FORD ANALYST JONES MANAGER SCOTT ANALYST SMITH CLERK ALLEN SALESMAN BLAKE MANAGER JAMES CLERK MARTIN SALESMAN TURNER SALESMAN WARD SALESMAN EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO CLARK MANAGER KING PRESIDENT MILLER CLERK ADAMS CLERK FORD ANALYST JONES MANAGER SCOTT ANALYST SMITH CLERK ALLEN SALESMAN BLAKE MANAGER JAMES CLERK MARTIN SALESMAN TURNER SALESMAN WARD SALESMAN
7 Evaluatievolgorde Als laatste Dus zelfs na HAVING, rownum … Behalve: voor de ORDER BY Wil je ze in WHERE-clausule hebben nesten (inline view) af3b.sql af3a.sql
8 Syntax (,,…) OVER ( )
9 De functies LAGCOUNTCORR LEADSUMCOVAR_POP FIRST_VALUEMAXSTDDEV LAST_VALUEMINSTDDEV_POP RANKAVGSTDDEV_SAMP DENSE_RANKNTILEVAR_POP RATIO_TO_REPORTCUME_DISTVAR_SAMP ROW_NUMBERPERCENT_RANKVARIANCE REGR_x (9 stuks)
10 Partitieclausule PARTITION BY,, … Beetje vergelijkbaar met SQL*Plus commando BREAK af4.sql
11 Ordeningsclausule ORDER BY expressie, … Verandert werking van functie van een totaalfunctie naar een lopend totaal af5.sql
12 Voorbeeld 1: Top N Met name interessant voor BI-zoekvragen M.b.v. analytische functies COUNT, RANK of DENSE_RANK af6.sql
13 Voorbeeld 2: etappe-uitslag 1. David Zabriskie (VSt)0.58:31 2. Ivan Basso (Ita) + 0:17 3. Paolo Savoldelli (Ita) + 0:44 4. Marzio Bruseghin (Ita) + 0:48 5. Serguei Gonchar (Oek) z.t. 6. Vladimir Karpets (Rus) + 1:07 7. Markus Fothen (Dui) + 1:15 8. Thomas Dekker (Ned) + 1:23 9. Jan Hruska (Tsj) + 1: Danilo di Luca (Ita) z.t. af7.sql
14 Voorbeeld 3: perioden Eis: niet-overlappend en aansluitend Variant 1) alleen begindatum SELECT... FROM a WHERE begindatum < b_peildatum AND NOT EXISTS ( SELECT ‘grotere begindatum’ FROM a a2 WHERE “a join a2” AND begindatum < b_peildatum AND a2.begindatum > a.begindatum ) Variant 2) begindatum en einddatum veel triggercode om eis af te dwingen af8.sql
15 Voorbeeld 4: vorig voorschotbedrag Per klant iedere maand een nota met notaregel met het voorschotbedrag Per klant eenmaal per jaar een nota met regel voor periodieke afrekening Vorig voorschotbedrag = het bedrag van de notaregel die qua datum voor de laatste periodieke afrekening ligt af9.sql
16 Voorbeeld 5: Groeperen TIJD HOEVEELHEID :22: :22: :22: :22: :22: :22: :23: :23: af10.sql MIN(TIJD) MAX(TIJD) HOEVEELHEID :22:01 12:22: :22:45 12:22: :23:12 12:23:
17 Vensterclausule Verder specificeren op welke gegevens de analytische functie moet werken Geankerd / Zwevend Rijen (ROWS) / Bereik (RANGE) Bijv: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW of: ROWS 5 PRECEDING af8.sql
18 Einde V R A G E N ? af8.sql