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.
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)