Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Ez a függvény a csoport értékeinek átlagát adja vissza. Figyelmen kívül hagyja a null értékeket.
Transact-SQL szintaxis konvenciók
Szemantika
AVG ( [ ALL | DISTINCT ] expression )
[ OVER ( [ partition_by_clause ] order_by_clause ) ]
Arguments
ALL
Az összesítő függvény alkalmazása az összes értékre. ALL az alapértelmezett.
KÜLÖNBÖZŐ
Megadja, hogy az AVG csak egy egyedi példányon működik minden értékből, függetlenül attól, hányszor fordul elő ez az érték.
kifejezés
A pontos numerikus vagy közelítő számszámos adattípus kategóriájának kifejezése, kivéve a bitadattípust. Az összesítő függvények és al lekérdezések nem engedélyezettek.
VÉGE ( [ partition_by_clause ] order_by_clause)
partition_by_clause a FROM klauzula által generált eredményhalmazt osztja szétosztásokra, amelyekhez a függvény alkalmazható. Ha nincs megadva, a függvény a lekérdezés eredményhalmazának összes sorát egyetlen csoportként kezeli. A order_by_clause határozza meg a művelet logikai sorrendjét. A order_by_clause kötelező. További információért lásd az OVER záradékot (Transact-SQL).
Visszatérési típusok
Az expresszió kiértékelt eredménye határozza meg a visszaküldés típusát.
| Kifejezés eredménye | Visszatérési típus |
|---|---|
| tinyint | int |
| smallint | int |
| int | int |
| bigint | bigint |
| Tizedes kategória (P, S) | tizedes (38, max(s,6)) |
| Pénz és Kispénz kategóriába | pénz |
| Float és reaal kategória | float |
Megjegyzések
Ha az adott kifejezés adattípusa alias adattípus, akkor a visszaküldés típusa is az alias adattípusú. Azonban, ha az alias adattípus alapadattípusát előléptetjük, például tinyintbőlint-re, akkor a visszaküldött érték a előléptetett adattípust veszi, nem az alias adattípust.
AVG () egy értékhalmaz átlagát úgy számolja ki, hogy az értékek összegét elosztja a nem null értékek számával. Ha az összeg meghaladja a visszaadó adattípus maximális értékét, az AVG() hibát ad vissza.
Az AVG determinisztikus függvény, ha az OVER és ORDER BY klauzulák nélkül használják. Nem determinisztika, ha az OVER és ORDER BY klauzulákkal van megadva. További információ: Determinisztikus és Nemdeterminista függvények. Az AVG nemdeterminisztikus függvényként is úgy viselkedhet, ha float és real adattípusokkal használjuk. De az alapvető ok ezeknek az adattípusoknak a közelítő jellege.
Példák
A. A SUM és AVG függvények használata számításokhoz
Ez a példa kiszámítja az átlagos szabadságórákat, valamint a betegszabadság összegét, amelyeket az Adventure Works Cycles alelnökei használtak. Ezek az aggregált függvények mindegyike egyetlen összefoglaló értéket ad az összes lekért sorhoz. A példa az AdventureWorks2025 adatbázist használja.
SELECT AVG(VacationHours)AS 'Average vacation hours',
SUM(SickLeaveHours) AS 'Total sick leave hours'
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Vice President%';
Itt van az eredmények összessége.
Average vacation hours Total sick leave hours
---------------------- ----------------------
25 97
(1 row(s) affected)
B. A SUM és AVG függvények használata egy GROUP BY záradékkal
Ha egy GROUP BY klauzulával együtt használják, minden aggregált függvény egyetlen értéket ad létre, amely minden csoportot lefed, nem pedig egyetlen értéket ad le, amely az egész táblát lefedi. Az alábbi példa összefoglaló értékeket hoz az egyes értékesítési területekről az AdventureWorks2025 adatbázisban. Az összefoglaló felsorolja az adott területen az értékesítők átlagos bónuszait, valamint az adott területek év óta elért eladásainak összegét.
SELECT TerritoryID, AVG(Bonus)as 'Average bonus', SUM(SalesYTD) as 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO
Itt van az eredmények összessége.
TerritoryID Average Bonus YTD Sales
----------- --------------------- ---------------------
NULL 0.00 1252127.9471
1 4133.3333 4502152.2674
2 4100.00 3763178.1787
3 2500.00 3189418.3662
4 2775.00 6709904.1666
5 6700.00 2315185.611
6 2750.00 4058260.1825
7 985.00 3121616.3202
8 75.00 1827066.7118
9 5650.00 1421810.9242
10 5150.00 4116871.2277
(11 row(s) affected)
C. AVG használata DISTINCT-val
Ez a kimutatás adja vissza az AdventureWorks2025 adatbázisban szereplő termékek átlagos listárait. A DISTINCT használatával a számítás csak egyedi értékeket vesz figyelembe.
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;
Itt van az eredmények összessége.
------------------------------
437.4042
(1 row(s) affected)
D. AVG használata DISTINCT nélkül
DISTINCT nélkül a AVG függvény megtalálja az összes termék átlagos Product listáraját az AdventureWorks2025 adatbázisban, beleértve a duplikált értékeket is.
SELECT AVG(ListPrice)
FROM Production.Product;
Itt van az eredmények összessége.
------------------------------
438.6662
(1 row(s) affected)
E. Az OVER záradék használata
A következő példa az AVG függvényt az OVER záradékzal használja, hogy az AdventureWorks2025 adatbázis táblázatában szereplő területek Sales.SalesPerson éves eladásainak mozgó átlaját adja meg. Az adatokat partícióval TerritoryID osztják és logikusan rendezik .SalesYTD Ez azt jelenti, hogy az AVG függvényt minden területre az eladási év alapján számítják ki.
TerritoryID Az 1-nél két sor van a 2005-ös értékesítési évre, amelyek a két értékesítőt jelölik, akik abban az évben eladták. E két sor átlagos eladásait kiszámítjuk, majd a 2006-os év harmadik sor is belekerül a számításba.
SELECT BusinessEntityID, TerritoryID
,DATEPART(yy,ModifiedDate) AS SalesYear
,CONVERT(VARCHAR(20),SalesYTD,1) AS SalesYTD
,CONVERT(VARCHAR(20),AVG(SalesYTD) OVER (PARTITION BY TerritoryID
ORDER BY DATEPART(yy,ModifiedDate)
),1) AS MovingAvg
,CONVERT(VARCHAR(20),SUM(SalesYTD) OVER (PARTITION BY TerritoryID
ORDER BY DATEPART(yy,ModifiedDate)
),1) AS CumulativeTotal
FROM Sales.SalesPerson
WHERE TerritoryID IS NULL OR TerritoryID < 5
ORDER BY TerritoryID,SalesYear;
Itt van az eredmények összessége.
BusinessEntityID TerritoryID SalesYear SalesYTD MovingAvg CumulativeTotal
---------------- ----------- ----------- -------------------- -------------------- --------------------
274 NULL 2005 559,697.56 559,697.56 559,697.56
287 NULL 2006 519,905.93 539,801.75 1,079,603.50
285 NULL 2007 172,524.45 417,375.98 1,252,127.95
283 1 2005 1,573,012.94 1,462,795.04 2,925,590.07
280 1 2005 1,352,577.13 1,462,795.04 2,925,590.07
284 1 2006 1,576,562.20 1,500,717.42 4,502,152.27
275 2 2005 3,763,178.18 3,763,178.18 3,763,178.18
277 3 2005 3,189,418.37 3,189,418.37 3,189,418.37
276 4 2005 4,251,368.55 3,354,952.08 6,709,904.17
281 4 2005 2,458,535.62 3,354,952.08 6,709,904.17
(10 row(s) affected)
Ebben a példában az OVER klauzula nem tartalmazza a PARTITION BY-t. Ez azt jelenti, hogy a függvény minden lekérdezés által visszaadott sorra vonatkozik. Az OVER klauzulában meghatározott ORDER BY klauzula határozza meg az AVG függvény logikai sorrendjét. A lekérdezés az összes WHERE záradékban meghatározott értékesítési terület éves mozgó átlaját adja vissza. A SELECT utasításban megadott ORDER BY záradék határozza meg, hogy a SELECT utasítás sorainak sorrendje szerint jeleníti meg a lekérdezés sorait.
SELECT BusinessEntityID, TerritoryID
,DATEPART(yy,ModifiedDate) AS SalesYear
,CONVERT(VARCHAR(20),SalesYTD,1) AS SalesYTD
,CONVERT(VARCHAR(20),AVG(SalesYTD) OVER (ORDER BY DATEPART(yy,ModifiedDate)
),1) AS MovingAvg
,CONVERT(VARCHAR(20),SUM(SalesYTD) OVER (ORDER BY DATEPART(yy,ModifiedDate)
),1) AS CumulativeTotal
FROM Sales.SalesPerson
WHERE TerritoryID IS NULL OR TerritoryID < 5
ORDER BY SalesYear;
Itt van az eredmények összessége.
BusinessEntityID TerritoryID SalesYear SalesYTD MovingAvg CumulativeTotal
---------------- ----------- ----------- -------------------- -------------------- --------------------
274 NULL 2005 559,697.56 2,449,684.05 17,147,788.35
275 2 2005 3,763,178.18 2,449,684.05 17,147,788.35
276 4 2005 4,251,368.55 2,449,684.05 17,147,788.35
277 3 2005 3,189,418.37 2,449,684.05 17,147,788.35
280 1 2005 1,352,577.13 2,449,684.05 17,147,788.35
281 4 2005 2,458,535.62 2,449,684.05 17,147,788.35
283 1 2005 1,573,012.94 2,449,684.05 17,147,788.35
284 1 2006 1,576,562.20 2,138,250.72 19,244,256.47
287 NULL 2006 519,905.93 2,138,250.72 19,244,256.47
285 NULL 2007 172,524.45 1,941,678.09 19,416,780.93
(10 row(s) affected)