Aracılığıyla paylaş


AVG (Transact-sql)

Bir gruptaki değerlerin ortalamasını verir. NULL değerler göz ardı edilir. Tarafından takip edilmesi yan tümcesi içinde.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

AVG ( [ ALL | DISTINCT ] expression ) 

Bağımsız değişkenler

  • ALL
    Toplama işlevi, tüm değerleri için geçerlidir. TÜM varsayılan olduğunu.

  • FARKLI
    avg yalnızca bir değeri, değerin kaç kez bakılmaksızın her benzersiz bir örnek üzerinde gerçekleştirilmesi belirtir.

  • expression
    Olan bir ifade , tam sayısal veya yaklaşık sayısal veri türü kategori, dışında bitveri türü. Toplama işlevleri ve alt sorgular verilmez.

Dönüş Türleri

Dönüş türü değerlendirilmiş sonucunu türü tarafından belirlenir expression.

Ifade sonucu

Dönüş türü

tinyint

int

smallint

int

int

int

bigint

bigint

decimalKategori (p, s)

decimal(38, s) Bölünen decimal(10, 0)

moneyve smallmoneyKategori

money

floatve realKategori

float

Açıklamalar

Eğer veri türü expressionbir diğer ad veri türü, dönüş türü olduğunu da diğer ad veri türü. Temel veri türü varsa ancak, diğer ad veri türü, örneğin yükseltilir tinyintiçin int, dönüş değeri olan tanıtılan veri türü ve diğer ad veri türü değil.

avg () tarafından nonnull değerlerin sayısını bu değerlerinin toplamına bölerek değerler kümesinin ortalamasını hesaplar. Toplam değerin veri türü için en yüksek değeri aşarsa bir hata döndürülür.

Örnekler

A.Hesaplamalar için Topla ve avg işlevlerini kullanma

Aşağıdaki örnek, ortalama tatil saatleri ve hasta toplamı bırakın Saat olan hesaplar, başkan yardımcıları Adventure Works Cycleskullanmış. Bu toplu işlevlerin her biri için alınan tüm satırlar tek bir Özet değer üretir.

USE AdventureWorks2012;
GO
SELECT AVG(VacationHours)AS 'Average vacation hours', 
    SUM(SickLeaveHours) AS 'Total sick leave hours'
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Vice President%';

USE AdventureWorks2012;
GO
SELECT AVG(VacationHours)AS 'Average vacation hours', 
    SUM(SickLeaveHours) AS 'Total sick leave hours'
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Vice President%';

Sonuç kümesi buradadır.

Average vacation hours       Total sick leave hours

----------------------       ----------------------

25                           97

(1 row(s) affected)

B.group by yan tümcesi ile topla ve avg işlevlerini kullanma

Birlikte kullanıldığında bir GROUP BYyan tümcesi, her toplama işlevi her grup için tek bir değer için tüm tablo yerine üretir. Aşağıdaki örnek, her satış bölgesi için Özet değerler üretir. Özet, her bölge ve her bölge için bir yıl tarihi satış toplamı satış insanlar tarafından alınan ortalama bonus listeler.

USE AdventureWorks2012;
GO
SELECT TerritoryID, AVG(Bonus)as 'Average bonus', SUM(SalesYTD) as 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO

USE AdventureWorks2012;
GO
SELECT TerritoryID, AVG(Bonus)as 'Average bonus', SUM(SalesYTD) as 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO

Sonuç kümesi buradadır.

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)

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 DISTINCT kullanma

Aşağıdaki deyim ürünleri ortalama liste fiyatını verir. DISTINCT belirterek, yalnızca benzersiz değerleri hesaplamada kabul edilir.

USE AdventureWorks2012;
GO
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;

USE AdventureWorks2012;
GO
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;

Sonuç kümesi buradadır.

------------------------------

437.4042

(1 row(s) affected)

D.İstimal avg ezeli ayrı

DISTINCT, olmadan AVGişlev tüm ürünlerde ortalama liste fiyatı bulur Productherhangi bir yinelenen değerler içeren tablo.

USE AdventureWorks2012;
GO
SELECT AVG(ListPrice)
FROM Production.Product;

USE AdventureWorks2012;
GO
SELECT AVG(ListPrice)
FROM Production.Product;

Sonuç kümesi buradadır.

------------------------------

438.6662

(1 row(s) affected)

E.ÜZERINDEN yan tümcesi kullanarak

Aşağıdaki örnek avg işlevini kullanır ÜZERINDEN yan tümcesi ile her bölge için bir hareketli ortalama yıllık satış sağlamak için Sales.SalesPersontablosu. Verileri tarafından bölümlendirilir TerritoryIDve mantıklı tarafından sipariş SalesYTD. Yani avg işlevini satış yılı her bölge için hesaplanır. Bunun için fark TerritoryID1, orada olan satış 2005 yılı için iki satır gösteren iki satış kişi satış yıl. Bu iki satır ortalama satış hesaplanan ve sonra 2006 yılı için satış gösteren üçüncü satırın hesaplama dahil edilir.

USE AdventureWorks2012;
GO
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;

USE AdventureWorks2012;
GO
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;

Sonuç kümesi buradadır.

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)

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)

Bu örnekte, bölüm tarafından ÜZERINDEN yan tümcesi içermez. Bu işlev tüm satırlar, sorgu tarafından döndürülen uygulanacağı anlamına gelir. ALTI yan tümcesinde belirtilen order by yan tümcesi avg işlevini uygulandığı mantıksal sırası belirler. Hareketli ortalama satış yıl tüm satış bölgeleri için where yan tümcesinde belirtilen sorgu döndürür. select deyiminde belirtilen order by yan tümcesi içinde satırları sorgu görüntülenme sırasını belirler.

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;

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;

Sonuç kümesi buradadır.

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)

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)

Ayrıca bkz.

Başvuru

Toplama işlevleri (Transact-sql)

Yan (Transact-sql)