AVG
Omschrijving
AVG
is een aggregatiefunctie voor vensters die rijen partitioneert in groepen, rijen ordent op een veld en het gemiddelde van alle geldige numerieke waarden in de groep retourneert. Alle waarden in de groep worden bij elkaar opgeteld en gedeeld door het aantal geldige rijen (NOT NULL). U kunt gebruiken AVG
om voortschrijdende gemiddelden te berekenen.De
PARTITION BY
bepaalt welke velden moeten worden gebruikt om een set invoerrijen in groepen te partitioneren. De ORDER BY
bepaalt hoe de rijen in de partitie worden gerangschikt.De invoerrijen worden in groepen gescheiden in groepen op basis van de partitioneringsvelden, de rijen worden geordend op basis van de volgordevelden en berekent vervolgens de aggregatieexpressie (gemiddelde voor deze functie) in elke groep.
Syntaxis
whereAVG(input_field)OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]]RANGEBETWEENvaluePRECEDINGANDCURRENT ROW|ROWSwin_boundary|BETWEENwin_boundaryANDwin_boundary)win_boundarycan be:UNBOUNDED PRECEDINGvaluePRECEDINGUNBOUNDED FOLLOWINGvalueFOLLOWINGCURRENT ROW
Retourwaarde
Retourneert een waarde van het type
NUMERIC
of DOUBLE
afhankelijk van het type invoerveld
.Invoerparameters
- input_field
- Vereist. Het veld waarop de aggregatiefunctie moet worden uitgevoerd. U kunt elk numeriek veld of een valutaveld gebruiken.
- OVER()
- Vereist.OVERmoet worden gebruikt binnen eenAVGexpressie.
- PARTITION BYpartitioning_field
- Vereist. De . gebruikenPARTITION BYom een of meer velden op te geven voor het partitioneren van een groep invoerrijen. U kunt elk veldtype opgeven, behalve Valuta. Voorbeeld: u geeft het veld Maand op als het partitioneringsveld, zodat alle records met dezelfde waarde voor Maand in één partitie worden gegroepeerd.
- ORDER BYordering_field
- Vereist. De . gebruikenORDER BYom op te geven hoe de invoerrijen in de partitie moeten worden geordend met behulp van de waarden in het opgegeven veld binnen elke partitie. U kunt elk veldtype opgeven, behalve Valuta. U moet echter een numeriek veldtype gebruiken, zoals Geheel getal of Numeriek wanneer u de gebruiktRANGEclausule.U kunt de gebruikenDESCofASCtrefwoorden om te sorteren in aflopende volgorde (van hoge naar lage waarden, NULL-waarden zijn laatste) of oplopende volgorde (van lage naar hoge waarden, NULL-waarden zijn eerst) voor elk bestelveld. Als u geen sorteervolgorde voor een bestelveld opgeeft, worden de rijen automatisch in oplopende volgorde gesorteerd.
- ROWS | BEREIK
- Vereist. DeROWSandRANGEMet clausules wordt het specifieke aantal rijen (ten opzichte van de huidige rij) binnen de partitie gedefinieerd door een vensterframe op te geven. U definieert het vensterframe door begin- en eindpunten binnen de partitie op te geven, ook wel venstergrenzen genoemd. Het vensterframe is de set invoerrijen in elke partitie waarover de aggregatieexpressie (gemiddelde voor deze functie) moet worden berekend. Het raamkozijn kan één, meerdere of alle rijen van de partitie bevatten.BeideROWSandRANGEgeef het rijbereik op ten opzichte van de huidige rij, maarRANGEwerkt logisch op waarden (logische koppeling) enROWSwerkt fysiek op rijen in de gegevensset (fysieke koppeling).RANGEbeperkt dat het vensterframe rijen bevat waarvan de waarden binnen het opgegeven bereik liggen, ten opzichte van de huidige waarde.ROWSbeperkt het vensterframe tot rijen die zich fysiek naast de huidige rij bevinden.GebruikenRANGEom absolute venstergrenzen te definiëren, zoals de afgelopen 3 maanden of het jaar tot heden. Wanneer u . gebruiktRANGE, deORDER BYVoor de component '' moet een numeriek veldtype worden gebruikt, zoals Geheel getal of Numeriek.Voorbeeld: stel dat u een geheel getal hebt met de naam MonthNum dat het nummer van de maand in het jaar vertegenwoordigt (waarden 1 tot 12). Als u alle waarden van de afgelopen 3 maanden wilt opgeven, ordent u op MonthNum en gebruikt uRANGE BETWEEN 2 PRECEDING AND CURRENT ROW. Deze RANGE-component bevat de huidige maand en de vorige twee maanden, wat resulteert in een totaal van drie maanden.Wanneer u een gegevensset publiceert die een vensterfunctie bevat metRANGE, moet het aantal rijen in het venster 1000 of minder zijn. Als een bepaald venster meer dan 1000 rijen bevat, mislukt de publicatietaak.
- win_boundary
- Vereist. De venstergrenzen definiëren het begin- en eindpunt van het raamkozijn. De venstergrenzen zijn relatief ten opzichte van de huidige rij.APRECEDINGMet de component '' wordt een venstergrens gedefinieerd die lager is dan de huidige rij (het aantal rijen dat vóór de huidige rij moet worden opgenomen). DeFOLLOWINGMet de component '' wordt een venstergrens gedefinieerd die groter is dan de huidige rij (het aantal rijen dat na de huidige rij moet worden opgenomen).Als u slechts één venstergrens opgeeft, wordt de huidige rij als de andere grens in het vensterframe gebruikt (de boven- of ondergrens, afhankelijk van de syntaxis van de expressie). DeUNBOUNDEDtrefwoord bevat alle rijen in de opgegeven richting. Als u zowel het begin als het einde van een vensterframe moet opgeven, gebruikt u deBETWEENandANDtrefwoorden.Wanneer u een specifiek aantal rijen opgeeft, moet dewaarde100 of minder zijn.Voorbeeld:ROWS 2 PRECEDINGbetekent dat het venster 3 rijen groot is, beginnend met 2 rijen vóór tot en met de huidige rij.Voorbeeld:ROWS UNBOUNDED FOLLOWINGbetekent dat het venster begint met de huidige rij en de huidige rij en alle rijen na de huidige rij bevat.
Voorbeelden
U kunt de verkoop voor het voortschrijdend gemiddelde (voortschrijdend gemiddelde of lopend gemiddelde) voor elke werknemer berekenen:
AVG([Sales]) OVER( PARTITION BY [Employee] ORDER BY [SalesDate] DESC ROWS UNBOUNDED PRECEDING)
U kunt de totale gemiddelde verkoop voor elke rij in de partitie berekenen, ongeacht de velden in de component ORDER BY:
AVG([Sales]) OVER( PARTITION BY [Employee] ORDER BY [SalesDate] DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
U kunt het voortschrijdende gemiddelde over 12 maanden berekenen:
AVG([fieldA]) OVER( PARTITION BY [fieldB] ORDER BY [Month] RANGE 11 PRECEDING)
De
Month
veld moet een numeriek veldtype zijn, zoals Geheel getal of Numeriek.U kunt het gemiddelde van het vorige jaar tot heden berekenen:
AVG([fieldA]) OVER( PARTITION BY [fieldB] ORDER BY [Year] RANGE 1 PRECEDING)
De
Year
veld moet een numeriek veldtype zijn, zoals Geheel getal of Numeriek.