Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft Fabric'teki SQL veritabanı
Bu fonksiyon, bir gruptaki değerlerin ortalamasını döndürür. Null değerleri görmezden gelir.
Transact-SQL söz dizimi kuralları
Sözdizimi
AVG ( [ ALL | DISTINCT ] expression )
[ OVER ( [ partition_by_clause ] order_by_clause ) ]
Arguments
HEPSİ
Toplama işlevini tüm değerlere uygular. ALL varsayılan durumdur.
FARKLI
AVG'nin her değerin yalnızca bir benzersiz örneğinde çalıştığını belirtir, bu değer kaç kez gerçekleşirse gerçekleşsin.
expression
Bit veri türü hariç, tam sayısal veya yaklaşık sayısal veri türü kategorisinin bir ifadesi. Toplama işlevlerine ve alt sorgulara izin verilmez.
OVER ( [ partition_by_clause ] order_by_clause)
partition_by_clause , FROM maddesi tarafından üretilen sonuç kümesini, fonksiyonun uygulandığı bölümlere böler. Belirtilmezse, işlev sorgu sonuç kümesinin tüm satırlarını tek bir grup olarak ele alır. order_by_clause, işlemin mantıksal sırasını belirler. order_by_clause zorunludur. Daha fazla bilgi için bkz. OVER Maddesi (Transact-SQL).
Dönüş türleri
Değerlendirilen ifadenin sonucu dönüş türünü belirler.
| İfade sonucu | Dönüş türü |
|---|---|
| tinyint | int |
| smallint | int |
| int | int |
| bigint | bigint |
| ondalık kategori (p, s) | ondalık (38, maksimum(s,6)) |
| para ve küçük para kategorileri | para |
| Float ve gerçek kategori | float |
Açıklamalar
Eğer ifade veri tipi bir takma ad veri tipi ise, dönüş türü de alias veri tipindendir. Ancak, takma ad veri tipinin temel veri tipi yükseltilirse, örneğin tinyint'tenint'e, geri dönüş değeri tanıtılan veri tipini alır, alias veri tipini değil.
AVG (), bir değer kümesinin ortalamasını bu değerlerin toplamını null olmayan değerlerin sayısına bölerek hesaplar. Toplam, dönüş değerinin veri tipinin maksimum değerini aşarsa, AVG() hata döndürür.
AVG, OVER ve ORDER BY cümleleri olmadan kullanıldığında deterministik bir fonksiyondur. OVER ve ORDER BY maddeleriyle belirtildiğinde belirsizliktir. Daha fazla bilgi için bkz . Deterministic ve Nondeterministic Functions. Ayrıca, AVG float ve gerçek veri tipleriyle kullanıldığında belirsiz bir fonksiyon gibi davranabilir. Ancak temel sebep, bu veri türlerinin yaklaşık doğasıdır.
Örnekler
A. Hesaplamalar için SUM ve AVG fonksiyonlarının kullanılması
Bu örnek, Adventure Works Cycles başkan yardımcılarının kullandığı ortalama tatil saatlerini ve hastalık izni saatlerinin toplamını hesaplar. Bu toplu fonksiyonların her biri, alınan tüm satırlar için tek bir özet değeri üretir. Örnek AdventureWorks2025 veritabanını kullanıyor.
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 aşağıdadır.
Average vacation hours Total sick leave hours
---------------------- ----------------------
25 97
(1 row(s) affected)
B. SUM ve AVG fonksiyonlarının GROUP BY cümlesi ile kullanılması
Bir GROUP BY madde ile kullanıldığında, her toplu fonksiyon tüm tabloyu kapsayan tek bir değer yerine her grubu kapsayan tek bir değer üretir. Aşağıdaki örnek, AdventureWorks2025 veritabanındaki her satış bölgesi için özet değerler üretir. Özet, her bölgedeki satış temsilcilerinin aldığı ortalama bonusları ve her bölge için yılbaşından beri satışların toplamını listeler.
SELECT TerritoryID, AVG(Bonus)as 'Average bonus', SUM(SalesYTD) as 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO
Sonuç kümesi aşağıdadı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)
C. AVG ile DISTINCT kullanımı
Bu ifade, AdventureWorks2025 veritabanındaki ürünlerin ortalama liste fiyatını geri getirir. DISTINCT kullanılarak hesaplama yalnızca benzersiz değerleri dikkate alır.
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;
Sonuç kümesi aşağıdadır.
------------------------------
437.4042
(1 row(s) affected)
D. AVG FARK olmadan kullanmak
DISTINCT olmadan, AVG fonksiyon AdventureWorks2025 veritabanındaki tablodaki tüm ürünlerin Product ortalama liste fiyatını, tekrarlanan değerler dahil olmak üzere bulur.
SELECT AVG(ListPrice)
FROM Production.Product;
Sonuç kümesi aşağıdadır.
------------------------------
438.6662
(1 row(s) affected)
E. OVER maddesinin kullanımı
Aşağıdaki örnek, AdventureWorks2025 veritabanındaki tablodaki her bölge Sales.SalesPerson için yıllık satışların hareketli ortalamasını sağlamak için AVG fonksiyonunu OVER maddesi ile kullanır. Veri ile TerritoryID bölünür ve mantıksal olarak sıralanır SalesYTD. Bu, AVG fonksiyonunun her bölge için satış yılına göre hesaplandığı anlamına gelir. 1 için TerritoryID , 2005 satış yılı için iki satır vardır ve bu satırlar, o yıl satışa sahip iki satış temsilcisini temsil eder. Bu iki satır için ortalama satışlar hesaplanır ve ardından 2006 yılı satışlarını temsil eden üçüncü satır hesaplamaya dahil edilir.
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 aşağıdadı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)
Bu örnekte, OVER maddesi PARTITION BY'yi içermez. Bu, fonksiyonun sorgu tarafından döndürülen tüm satırlara uygulandığı anlamına gelir. OVER maddesinde belirtilen ORDER BY maddesi, AVG fonksiyonunun uygulanacağı mantıksal sırayı belirler. Sorgu, WHERE maddesinde belirtilen tüm satış bölgeleri için yıl bazında satışların hareketli ortalamasını döndürür. SELECT ifadesinde belirtilen ORDER BY maddesi, SELECT i'ninin sorgu satırlarını gösterme 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;
Sonuç kümesi aşağıdadı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)