• SQL toplama işlevleri. SQL'de Gruplama: GROUP BY, HAVING Cümleleri ve Toplama İşlevleri

    Disiplin sütununun değerine göre. Gruptaki demet sayısı, Puan sütununun maksimum veya minimum değeri gibi bazı grup değerlerini hesaplayabileceğimiz 4 grup elde edeceğiz. Tablo 5.7. Toplu işlevler
    İşlev Sonuç
    SAYMAK Sorgunun seçtiği satır sayısı veya boş olmayan alan değerleri
    TOPLAM Belirli bir alanın seçilen tüm değerlerinin toplamı
    ortalama Belirli bir alanda seçilen tüm değerlerin aritmetik ortalaması
    DAK Bu alan için seçilen tüm değerlerin en küçüğü
    MAKS. Bu alan için seçilen tüm değerlerin en büyüğü
    R1
    Ad Soyad Disiplin Seviye
    Grup 1 Petrov F.I. Veri tabanı 5
    Sidorov K. A. Veri tabanı 4
    Mironov A.V. Veri tabanı 2
    Stepanova K.E. Veri tabanı 2
    Krylova T. S. Veri tabanı 5
    Vladimirov V. A. Veri tabanı 5
    Grup 2 Sidorov K. A. Bilgi teorisi 4
    Stepanova K.E. Bilgi teorisi 2
    Krylova T. S. Bilgi teorisi 5
    Mironov A.V. Bilgi teorisi Hükümsüz
    Grup 3 Trofimov P.A. Ağlar ve telekomünikasyon 4
    İvanova E. A. Ağlar ve telekomünikasyon 5
    Utkina N.V. Ağlar ve telekomünikasyon 5
    Grup 4 Vladimirov V. A. ingilizce dili 4
    Trofimov P.A. ingilizce dili 5
    İvanova E. A. ingilizce dili 3
    Petrov F.I. ingilizce dili 5

    Toplu işlevler bir SELECT deyimindeki alan adları gibi kullanılır, bir istisna dışında: alan adını bağımsız değişken olarak alırlar. SUM ve AVG işlevleriyle yalnızca sayısal alanlar kullanılabilir. COUNT , MAX ve MIN işlevleriyle hem sayısal hem de karakter alanları kullanılabilir. Karakter alanlarıyla birlikte kullanıldığında MAX ve MIN, bunları ASCII eşdeğerlerine çevirir ve şu şekilde işler: alfabetik sıra. Bazı DBMS'ler iç içe toplamalara izin verir, ancak bu, tüm sonuçlarıyla birlikte ANSI standardından bir sapmadır.

    Örneğin, her disiplinde sınava giren öğrenci sayısını hesaplayabilirsiniz. Bunu yapmak için "Konu" alanına göre gruplanmış bir sorgu çalıştırmanız ve sonuç olarak disiplinin adını ve bu disiplin için gruptaki satır sayısını görüntülemeniz gerekir. * karakterini bağımsız değişken olarak kullanma COUNT işlev bir gruptaki tüm satırları saymak anlamına gelir.

    R1.Disipline Göre R1 GRUBU'NDAN R1.Disiplin SAYISI(*) SEÇİN

    Sonuç:

    Herhangi bir disiplinde sınavı geçen öğrenci sayısını saymak istiyorsak, gruplandırmadan önce boş değerleri orijinal orandan çıkarmamız gerekir. Bu durumda, istek şöyle görünecektir:

    Sonucu elde ederiz:

    Bu durumda, öğrenci ile çizgi

    Mironov A.V. Bilgi teorisi Hükümsüz

    gruplandırmadan önce demet kümesine düşmeyecek, bu nedenle disiplin için gruptaki demet sayısı " Bilgi teorisi"1 eksik olacak.

    Kabul edilebilir toplama işlevleri ayrıca ön gruplama işlemi olmadan, bu durumda tüm ilişki tek bir grup olarak kabul edilir ve bu grup için grup başına bir değer hesaplanabilir.

    Tekrar "Oturum" veri tabanına (tablolar R1, R2, R3) atıfta bulunarak, başarıyla geçilen sınavların sayısını buluyoruz:

    Bu, elbette bir alan seçmekten farklıdır, çünkü tabloda kaç satır olursa olsun her zaman tek bir değer döndürülür. Argüman toplama işlevleri ayrı tablo sütunları olabilir. Ancak örneğin bir gruptaki belirli bir sütunun farklı değerlerinin sayısını hesaplamak için sütun adıyla birlikte DISTINCT anahtar sözcüğünü kullanmanız gerekir. Her disiplinde alınan farklı notların sayısını hesaplayalım:

    Sonuç:

    Sonuç, bir gruplandırma alanı değeri ve birkaç tane içerebilir. toplama işlevleri ve gruplandırma koşullarında birden çok alan kullanılabilir. Bu durumda gruplar, belirtilen gruplandırma alanlarına göre oluşturulur. Toplu işlemler, birden çok kaynak tabloyu birleştirmek için uygulanabilir. Örneğin şu soruyu soralım: her grup ve disiplin için sınavı başarıyla geçenlerin sayısını ve disiplinin ortalama puanını belirleyin.

    Sonuç:

    kullanamayız toplama işlevleri WHERE yan tümcesinde, çünkü yüklemler tek bir satır açısından değerlendirilir ve toplama işlevleri- sıra grupları açısından.

    GROUP BY yan tümcesi, belirli bir alandaki değerlerin bir alt kümesini başka bir alan açısından tanımlamanıza ve alt kümeye bir toplama işlevi uygulamanıza olanak tanır. Bu, alanları birleştirmeyi mümkün kılar ve toplama işlevleri tek bir SELECT yan tümcesinde. Toplu işlevler hem SELECT satırının sonuçlarının çıktı ifadesinde hem de oluşturulan HAVING grupları için işleme koşulunun ifadesinde kullanılabilir. Bu durumda, seçilen her grup için her toplama işlevi hesaplanır. Hesaplamadan kaynaklanan değerler toplama işlevleri, karşılık gelen sonuçları görüntülemek veya grupların seçimini koşullandırmak için kullanılabilir.

    Sınavlarda bir disiplinde birden fazla ikili alınan grupları gösteren bir sorgu oluşturalım:

    Gelecekte, örnek olarak, "Oturum" veritabanıyla değil, bir tablodan oluşan "Banka" veritabanıyla çalışacağız F , belirli bir bankanın şubelerindeki hesaplar hakkında bilgi içeren F ilişkisini depolar:

    F = (N, Ad Soyad, Şube, Açılış Tarihi, Kapanış Tarihi, Bakiye); Q = (Şube, Şehir);

    çünkü bu temelde, toplu işlevler ve gruplama ile çalışmayı daha net bir şekilde göstermek mümkündür.

    Örneğin, şubelerdeki toplam hesap bakiyesini bulmak istediğimizi varsayalım. Her şube için tablodan TOPLA(Bakiye) seçerek her biri için ayrı sorgulama yapabilirsiniz. GROUP BY , ancak hepsini tek bir komuta koyacaktır:

    Şube SEÇ, F GRUPTAN TOPLAM(Bakiye) Şube Bazında;

    GROUP BY geçerlidir toplama işlevleriŞube alanının değeri tarafından tanımlanan her grup için bağımsız olarak. Grup, Şube alanında aynı değere sahip satırlardan oluşur ve



    • Toplu işlevler bir SELECT deyimindeki alan adları gibi kullanılır, bir istisna dışında: alan adını bağımsız değişken olarak alırlar. özellikleri ile TOPLAM Ve ortalama sadece sayısal alanlar kullanılabilir. özellikleri ile SAYI, MAKS ve MİN hem sayısal hem de karakter alanları kullanılabilir. Karakter alanlarıyla birlikte kullanıldığında MAKS. Ve DAK bunları ASCII eşdeğerlerine çevirecek ve alfabetik sırayla işleyecektir. Bazı DBMS'ler iç içe toplamalara izin verir, ancak bu, tüm sonuçlarıyla birlikte ANSI standardından bir sapmadır.


    Örneğin, her disiplinde sınava giren öğrenci sayısını hesaplayabilirsiniz. Bunu yapmak için, "Konu" alanına göre gruplandırılmış bir sorgu yürütmeniz ve sonuç olarak disiplinin adını ve bu disiplin için gruptaki satır sayısını görüntülemeniz gerekir. * karakterini COUNT işlevinin bağımsız değişkeni olarak kullanmak, gruptaki tüm satırları saymak anlamına gelir.

    R1'İ SEÇİN. Disiplin, COUNT(*)

    R1.Disipline Göre GRUPLAMA;

    Sonuç:


    SEÇ R1.Disiplin, SAY (*)

    NEREDE R1. Değerlendirme BOŞ DEĞİLDİR

    R1.Disipline Göre GRUPLAMA;

    Sonuç:


    gruplandırmadan önce demet kümesine düşmeyecek, bu nedenle "Bilgi Kuramı" disiplini için gruptaki demet sayısı 1 daha az olacaktır.

    Sorgu şu şekilde yazılırsa benzer bir sonuç elde edilebilir:

    R1'İ SEÇİN. Disiplin, COUNT(R1.Puan)

    R1 TARAFINDAN GRUPLANDIRILMIŞTIR. Disiplin;

    İşlev COUNT (ÖZELLİK ADI) bir fonksiyondan farklı olarak bir gruptaki tanımlı değerlerin sayısını sayar SAYMAK(*), bir gruptaki satır sayısını sayar. Nitekim "Bilgi Teorisi" disiplinine sahip grupta 4 satır olacak, ancak "Değerlendirme" özniteliğinin yalnızca 3 belirli değeri olacaktır.


    Toplu İşlevlerde NULL Değerleri İşleme Kuralları

    Bir sütundaki herhangi bir değer eşitse HÜKÜMSÜZ işlevin sonucu hesaplanırken hariç tutulur.

    Bir sütundaki tüm değerler eşitse HÜKÜMSÜZ, O Maks Minimum Toplam Ort. = BOŞ, say = 0 (sıfır).

    Tablo boşsa, say(*) = 0 .

    Toplama işlevleri, ön gruplama işlemi olmadan da kullanılabilir; bu durumda, tüm ilişki bir grup olarak ele alınır ve bu grup için grup başına bir değer hesaplanabilir.

    Toplu İşlevleri Yorumlama Kuralları

    Toplu işlevler çıktı listesine dahil edilebilir ve ardından tüm tabloya uygulanır.

    R1'den MAX(Puan) SEÇİN oturumda maksimum notu verecek;

    R1'den TOPLA(Puan) SEÇİN oturum için tüm derecelendirmelerin toplamını verecektir;

    R1'den ORTALAMA(Puan) SEÇİN tüm oturum boyunca ortalama bir puan verecektir.


    2; Sonuç: "genişlik="640"

    Tekrar “Oturum” veri tabanına (tablo R1) atıfta bulunarak, başarıyla geçilen sınavların sayısını buluyoruz:

    SAYI SEÇ(*) kiralık _ sınavlar

    NEREDE puan 2;

    Sonuç:


    Toplama işlevleri, bağımsız tablo sütunlarını bağımsız değişken olarak alabilir. Örneğin, bir gruptaki belirli bir sütun için farklı değerlerin sayısını hesaplamak için, sütun adıyla birlikte DISTINCT anahtar sözcüğü kullanılmalıdır. Her disiplinde alınan farklı notların sayısını hesaplayalım:

    R1.Disiplin SEÇ, SAY (FARKLI R1.Puan)

    NEREDE R1. Değerlendirme BOŞ DEĞİLDİR

    R1.Disipline Göre GRUPLAMA;

    Sonuç:


    WHERE bölümündeki açık koşul hariç tutulursa aynı sonuç elde edilir, bu durumda sorgu şöyle görünür:

    R1'İ SEÇİN. Disiplin, COUNT(DISTINCT R1.Puan)

    R1 TARAFINDAN GRUPLANDIRILMIŞTIR. Disiplin;

    İşlev COUNT(FARKLI R1.Puan) sadece belirli sayar çeşitli değerler.

    Bu durumda elde etmek için İstenen sonuç, "Puan" sütununun bir ön veri türü dönüştürmesi yapmak, onu gerçek bir türe çevirmek gerekir, ardından ortalamanın hesaplanmasının sonucu bir tamsayı olmayacaktır. Bu durumda, istek şöyle görünecektir:


    2 R2'ye göre gruplandırın. Grup, R1. Disiplin; Burada, CAST() işlevi Puan sütununu geçerli bir veri türüne dönüştürür. "genişlik="640"

    Toplam olarak R2.Group, R1.Subject,Count(*), Ortalama_skor olarak AVG(cast(Puan as ondalık(3,1))) öğesini seçin

    R1,R2'den

    nerede R1. Tam ad = R2. Tam ad ve R1. değerlendirme boş değil

    ve R1. 2. sınıf

    R2'ye göre gruplandırın. Grup, R1. Disiplin;

    burada fonksiyon DÖKÜM() Puan sütununu geçerli bir veri türüne dönüştürür.


    Toplama işlevlerini bir WHERE yan tümcesinde kullanamazsınız çünkü bu bölümdeki koşullar tek bir satır açısından değerlendirilirken toplama işlevleri satır grupları açısından değerlendirilir.

    GROUP BY yan tümcesi, belirli bir alandaki değerlerin bir alt kümesini başka bir alan açısından tanımlamanıza ve alt kümeye bir toplama işlevi uygulamanıza olanak tanır. Bu, alanları ve toplama işlevlerini tek bir SELECT yan tümcesinde birleştirmeyi mümkün kılar. Toplama işlevleri, hem SELECT satırının sonuçlarının çıktı ifadesinde hem de oluşturulan HAVING gruplarının işlenmesi için koşul ifadesinde kullanılabilir. Bu durumda, seçilen her grup için her toplama işlevi hesaplanır. Toplama fonksiyonlarının hesaplanmasında elde edilen değerler, karşılık gelen sonuçları görüntülemek veya grup seçim koşulları için kullanılabilir.

    Sınavlarda bir disiplinde birden fazla ikili alınan grupları gösteren bir sorgu oluşturalım:


    1; Sonuç: "genişlik="640"

    R2'yi SEÇİN. Grup

    R1, R2'DEN

    NEREDE R1. Tam ad = R2. Tam adı VE

    R1.Puan = 2

    GRUP BY R2.Grup, R1.Disiplin

    HAVING sayısı(*) 1;

    Sonuç:


    Belirli bir bankanın şubelerindeki hesaplar hakkında bilgi içeren F ilişkisini saklayan bir F tablosundan oluşan bir "Banka" veritabanımız var:

    Şubelerdeki hesaplardaki toplam bakiyeyi bulun. Her dal için tablodan SUM (Remainder) seçerek her biri için ayrı sorgu yapabilirsiniz, ancak GROUP BY işlemi hepsini tek bir komutta toplayacaktır:

    SEÇME Dal , TOPLA( kalan )

    Şube bazında GRUP;

    GRUPLANDIRMAYA GÖREŞube alanının değeriyle tanımlanan her grup için toplama işlevlerini bağımsız olarak uygular. Grup, Şube alanında aynı değere sahip satırlardan oluşur ve işlev TOPLAM her grup için ayrı ayrı uygulanır, yani toplam hesap bakiyesi her şube için ayrı ayrı hesaplanır. Uygulandığı alanın değeri GRUPLANDIRMAYA GÖRE, tanım gereği, tıpkı bir toplama işlevinin sonucu gibi, çıktı grubu başına yalnızca bir değere sahiptir.


    5000; HAVING yan tümcesindeki bağımsız değişkenler, GROUP BY'nin kullanıldığı SELECT yan tümcesindekiyle aynı kurallara uyar. Çıkış grubu başına bir değere sahip olmalıdırlar. "genişlik="640"

    Yalnızca toplam hesap bakiyeleri 5.000$'dan fazla olan şubeleri ve seçilen şubelerin toplam bakiyelerini seçtiğinizi varsayalım. Toplam bakiyesi 5.000$'ın üzerinde olan şubeleri görüntülemek için HAVING yan tümcesini kullanın. HAVING yan tümcesi, WHERE yan tümcesinin tek tek satırlar için yaptığı gibi, belirli grupları çıktıdan çıkarmak için kullanılan ölçütleri belirtir.

    Doğru komut şöyle olacaktır:

    Şube SEÇ, SUM(Bakiye)

    GRUPLANDIRMAYA GÖRE Dal

    TOPLAMA SAHİP ( kalan ) 5 000;

    Cümledeki bağımsız değişkenler SAHİP OLMAK teklifte olduğu gibi aynı kurallara tabidir SEÇME nerede kullanılır GRUPLANDIRMAYA GÖRE. Çıkış grubu başına bir değere sahip olmalıdırlar.


    Aşağıdaki komut yasaklanacak:

    Şube SEÇ, TOPLA(Bakiye)

    Şube bazında grup

    Açılış Tarihi = 27/12/2004 OLAN ;

    Alan Açılış tarihi cümle içinde kullanılamaz SAHİP OLMAK, çünkü çıkış grubu başına birden fazla değere sahip olabilir. Bu durumu önlemek için teklif SAHİP OLMAK yalnızca toplamalara ve seçilen alanlara atıfta bulunmalıdır GRUPLANDIRMAYA GÖRE. Mevcut Doğru yol yukarıdaki isteği yapın:

    Şube SEÇ, TOPLA(Bakiye)

    NEREDE OpenDate = '27/12/2004'

    Şube bazında GRUP;


    Anlam verilen istek sonraki: 27 Aralık 2004'te açılan her bir hesap şubesi için bakiyelerin toplamını bulun.

    Daha önce belirtildiği gibi, HAVING yalnızca her çıkış grubu için bir değeri olan bağımsız değişkenleri alabilir. Uygulamada, toplama işlevlerine yapılan başvurular en yaygın olanıdır, ancak GROUP BY kullanılarak seçilen alanlar da geçerlidir. Örneğin, St. Petersburg, Pskov ve Uryupinsk'teki şubelerin hesaplarındaki toplam bakiyeyi görmek istiyoruz:

    Şube SEÇ, SUM(Bakiye)

    F,Q'DAN

    NEREDE F. Şube = Q. Şube

    Şube bazında grup

    ŞUBESİ İÇİNDE ('St. Petersburg', 'Pskov', 'Uryupinsk');

    100.000; Toplam bakiye 100.000$'dan fazla ise, bunu ortaya çıkan ilişkide göreceğiz, aksi halde boş bir ilişki elde edeceğiz. "genişlik="640"

    Bu nedenle, HAVING yan tümcesinin seçim yan tümcesinde yer alan yüklemlerin aritmetik ifadelerinde, yalnızca GROUP BY yan tümcesinde gruplandırma sütunları olarak belirtilen sütunların belirtimleri doğrudan kullanılabilir. Kalan sütunlar yalnızca şu şekilde değerlendirilen COUNT, SUM, AVG, MIN ve MAX toplama işlevlerinin belirtimlerinde belirtilebilir. bu durum tüm satır grubu için bir miktar toplam değer. HAVING bölümünün yürütülmesinin sonucu, yalnızca HAVING bölümündeki seçim koşulunun hesaplanması sonucunun DOĞRU olduğu satır gruplarını içeren gruplandırılmış bir tablodur. Özellikle, bir GROUP BY içermeyen bir sorguda bir HAVING yan tümcesi varsa, yürütmenin sonucu ya boş bir tablodur ya da sütunları gruplandırmadan tek bir grup olarak ele alınan tablo ifadesinin önceki bölümlerinin yürütülmesinin sonucudur. Bir örnek düşünün. Diyelim ki çıktı almak istiyoruz toplam tutar tüm şubeler için bakiyeler, ancak yalnızca 100.000 ABD Dolarından fazlaysa, bu durumda, sorgumuz gruplama işlemlerini içermeyecek, ancak bir HAVING bölümü içerecek ve şöyle görünecektir:

    TOPLAM SEÇ( kalan )

    TOPLAMA SAHİP( kalan ) 100 000;

    Toplam bakiye 100.000$'dan fazla ise, bunu ortaya çıkan ilişkide göreceğiz, aksi halde boş bir ilişki elde edeceğiz.


    Toplama işlevlerini kullanma

    SQL, çeşitli kategorilerdeki birçok yerleşik işlevi tanımlar; bunların arasında, birden çok satırın sütunlarının değerleri üzerinde çalışan ve tek bir değer döndüren toplama işlevleri tarafından özel bir yer işgal edilir. Toplama fonksiyonlarının argümanları hem tabloların sütunları hem de bunların üzerindeki ifadelerin sonuçları olabilir. Toplama işlevleri, diğer aritmetik ifadelere dahil edilebilir. Aşağıdaki tablo, en sık kullanılan standart tekli toplama işlevlerini listeler.


    Tekli toplama işlevinin genel biçimi aşağıdaki gibidir:

    işlev_adı([ALL | DISTINCT] ifadesi)

    DISTINCT, işlevin bağımsız değişkenin yalnızca farklı değerlerini dikkate alması gerektiğini belirtir ve ALL, kopyalar dahil tüm değerleri belirtir (bu varsayılandır). Örneğin, AVG işlevi ile anahtar kelime 1, 1, 1 ve 3 değerlerine sahip sütun satırları için DISTINCT 2 döndürür ve ALL anahtar sözcüğü varsa 1.5 döndürür.

    Toplama işlevleri, SELECT ve HAVING yan tümcelerinde kullanılır. Burada SELECT yan tümcesindeki kullanımlarına bakacağız. Bu durumda, işlev bağımsız değişkenindeki ifade, SELECT yan tümcesinin girdi tablosunun tüm satırlarına uygulanır. Ayrıca, bir sonraki bölümde inceleyeceğimiz bir GROUP BY yan tümceniz yoksa, bir SELECT yan tümcesinde hem toplama işlevlerini hem de tablo sütunlarını (veya onlarla birlikte ifadeleri) kullanamazsınız.

    COUNT işlevinin iki biçimi vardır. İlk durumda, giriş tablosunun satır sayısı, ikinci durumda, giriş tablosundaki argüman değerlerinin sayısı döndürülür:

    • SAYMAK(*)
    • COUNT( ifade)

    Bu işlevi kullanmanın en basit yolu, bir tablodaki satır sayısını saymaktır (tümünü veya belirli bir koşulu karşılayanları). Bunun için sözdiziminin ilk varyantı kullanılır.

    Sorgu: Bilgisi veri tabanında bulunan ürün türlerinin sayısı.

    COUNT(*) OLARAK SEÇİN "ürün sayısı"

    Üründen

    COUNT işlevinin sözdiziminin ikinci varyantında, tek bir sütunun adı bağımsız değişken olarak kullanılabilir. Bu durumda, giriş tablosunun bu sütunundaki tüm değerlerin veya yalnızca tekrarlanmayanların (DISTINCT anahtar sözcüğü kullanılırken) sayısı sayılır.

    Sorgu: Müşteri tablosunda bulunan farklı adların sayısı.

    SAYI SEÇİN (FARKLI FNAME)

    Müşteriden

    Diğer tekli toplama işlevlerinin kullanımı COUNT işlevine benzer, ancak MIN ve MAX işlevleri için DISTINCT ve ALL anahtar sözcüklerinin kullanımı mantıklı değildir. SAY, MAKS ve MİN işlevleriyle, sayısal alanların yanı sıra karakter alanları da kullanılabilir. Toplam işlev bağımsız değişkeni değer içermiyorsa, COUNT işlevi 0 döndürür ve diğerleri NULL döndürür.

    MAKS SEÇİN(SiparişTarihi)

    İTİBAREN

    NEREDE SiparişTarihi"1.09.2010"

    görev için bağımsız iş: Aşağıdaki verileri seçmek için SQL dili sorgularında formüle edin:

    • Tüm siparişlerin toplam maliyeti;
    • Müşteri tablosunda yer alan farklı şehirlerin sayısı.

    Belirli bir satıcı tarafından üretilen bilgisayar modellerinin sayısını nasıl öğrenebilirim? Aynı özelliklere sahip bilgisayarların ortalama fiyatı nasıl belirlenir? özellikler? Bunlar ve bazılarıyla ilgili diğer birçok soru istatistiki bilgi kullanarak cevaplar alabilirsiniz. özet (toplu) işlevler. Standart, aşağıdaki toplama işlevlerini sağlar:

    Bu işlevlerin tümü tek bir değer döndürür. Aynı zamanda, fonksiyonlar SAY, DAK Ve MAKS. herhangi bir veri türü için geçerliyken, TOPLAM Ve ortalama yalnızca sayısal alanlar için kullanılır. fonksiyon arasındaki fark SAYMAK(*) Ve SAYMAK(<имя поля>) saniyenin hesaplama yaparken NULL değerleri dikkate almamasıdır.

    Örnek. Kişisel bilgisayarlar için minimum ve maksimum fiyatı bulun:

    Örnek. Üretici A tarafından üretilen mevcut bilgisayar sayısını bulun:

    Örnek. Miktarla ilgileniyorsanız çeşitli modellerüretici A tarafından üretilmişse, sorgu aşağıdaki gibi formüle edilebilir (her modelin Ürün tablosunda bir kez kaydedildiği gerçeği kullanılarak):

    Örnek. Üretici A tarafından üretilen mevcut farklı modellerin sayısını bulun. Sorgu, üretici A tarafından üretilen toplam model sayısını belirlemenin gerekli olduğu bir öncekine benzer. Burada, PC tablosundaki (yani satışa hazır) farklı modellerin sayısını bulmak gerekir.

    İstatistiksel göstergeler elde edilirken sadece benzersiz değerlerin kullanılmasını sağlamak için, toplama işlevi bağımsız değişkeni kullanılabilir DISTINCT parametresi. Bir diğer TÜMÜ parametresi varsayılandır ve sütundaki tüm dönüş değerlerini saymayı bekler. Şebeke,

    Ürettiği PC modellerinin sayısını almamız gerekirse, her biriüretici, kullanmanız gerekecek GRUPLANDIRMA teklifine göre, sözdizimsel olarak ardından gelen WHERE yan tümceleri.

    GRUPLANDIRMA teklifine göre

    GRUPLANDIRMA teklifine göre uygulanabilecek çıktı satır gruplarını tanımlamak için kullanılır. toplama işlevleri (COUNT, MIN, MAX, AVG ve SUM). Bu yan tümce eksikse ve toplama işlevleri kullanılıyorsa, o zaman belirtilen adlara sahip tüm sütunlar SEÇME, dahil edilmelidir toplama işlevleri ve bu işlevler, sorgu koşulunu karşılayan tüm satır kümesine uygulanacaktır. Aksi takdirde, SEÇ listesinin tüm sütunları, dahil değil toplama işlevlerinde belirtilmelidir GROUP BY yan tümcesinde. Sonuç olarak, sorgunun tüm çıktı satırları, bu sütunlarda aynı değer kombinasyonları ile karakterize edilen gruplara ayrılır. Bundan sonra, toplama işlevleri her gruba uygulanacaktır. GROUP BY için tüm NULL değerlerinin eşit kabul edildiğini unutmayın; NULL değerleri içeren bir alana göre gruplandırırken, bu tür tüm satırlar tek bir gruba düşecektir.
    Eğer GROUP BY deyimi varsa, SELECT yan tümcesinde toplama işlevi yok, ardından sorgu her gruptan bir satır döndürür. DISTINCT anahtar sözcüğüyle birlikte bu özellik, bir sonuç kümesindeki yinelenen satırları ortadan kaldırmak için kullanılabilir.
    Basit bir örnek düşünün:
    Model SEÇİN, COUNT(model) AS Qty_model, AVG(fiyat) AS Ort._fiyat
    PC'DEN
    modele göre GRUP;

    Bu sorguda, her PC modeli için sayısı ve ortalama maliyeti belirlenir. ile tüm satırlar aynı değerler model (model numarası) bir grup oluşturur ve SELECT çıkışı her grup için değer sayısını ve ortalama fiyat değerlerini hesaplar. Sorgunun sonucu aşağıdaki tablo olacaktır:
    modeli Adet_modeli Ort_fiyat
    1121 3 850.0
    1232 4 425.0
    1233 3 843.33333333333337
    1260 1 350.0

    SELECT'te tarih içeren bir sütun varsa, bu göstergeleri her belirli tarih için hesaplamak mümkün olacaktır. Bunu yapmak için, tarihi bir gruplama sütunu olarak eklemeniz gerekir ve ardından her bir değer kombinasyonu (model-tarih) için toplama işlevleri hesaplanır.

    Birkaç özel var toplama işlevlerini yürütme kuralları:

    • Talep sonucunda ise satır alınmadı(veya bu grup için birden fazla satır), toplama işlevlerinin herhangi birini hesaplamak için başlangıç ​​verileri yoktur. Bu durumda, COUNT işlevlerinin yürütülmesinin sonucu sıfır olacak ve diğer tüm işlevlerin sonucu NULL olacaktır.
    • Argüman toplama işlevi kendisi toplama işlevleri içeremez(fonksiyondan fonksiyon). Onlar. bir talepte, örneğin, maksimum ortalama değerleri almak imkansızdır.
    • COUNT işlevini yürütmenin sonucu şudur: tamsayı(TAMSAYI). Diğer toplama işlevleri, işlenen değerlerin veri türlerini devralır.
    • TOPLA işlevi yürütülürken, kullanılan veri türünün maksimum değerini aşan bir sonuç elde edilirse, bir hata.

    Yani, istek içermiyorsa GRUP TARAFINDAN teklifler, O toplama işlevleri dahil SEÇ yan tümcesi, ortaya çıkan tüm sorgu dizelerinde yürütülür. İstek içeriyorsa GRUPLANDIRMA teklifine göre, belirtilen sütun veya sütun grubuyla aynı değerlere sahip her satır kümesi GRUPLANDIRMAYA GÖRE teklif, bir grup oluşturur ve toplama işlevleri her grup için ayrı ayrı yapılır.

    SAHİP TEKLİF

    Eğer WHERE yan tümcesi dize filtreleme için bir yüklem tanımlar, ardından HAVING yan tümcesi uygulamalı gruplamadan sonra değerlere göre benzer bir yüklem filtreleme grupları tanımlamak için toplama işlevleri. Bu madde, ile elde edilen değerleri doğrulamak için gereklidir. toplama işlevi içinde tanımlanan kayıt kaynağının ayrı satırlarından değil KİMDEN yan tümcesi, ve gelen bu tür çizgilerin grupları. Bu nedenle, böyle bir kontrol içeremez WHERE yan tümcesi.

    Alan değerlerinin genelleştirilmiş grup işlemlerini gerçekleştirebilirler. Bu, toplama işlevleri kullanılarak yapılır. Toplama işlevleri tüm tablo grubu için tek bir değer üretir. SQL aşağıdaki toplama işlevlerini sağlar:

    • SAYMAK– argüman olarak belirtilen alanın NULL olmayan değerlerine sahip tablo satırlarının sayısını sayar.
    • TOPLAM– verilen alanın seçilen tüm değerlerinin aritmetik toplamını hesaplar.
    • ortalama– verilen alanın tüm seçili değerlerinin ortalamasını alır.
    • MAKS.- görüntüler en yüksek değer bu alanın seçilen tüm değerlerinden.
    • DAK– Verilen alanda seçilen tüm değerlerin en küçük değerini görüntüler.

      Toplama işlevlerini kullanma

      Toplama işlevleri, bir sorgunun SELECT yan tümcesindeki alan adları gibi kullanılır, bir istisna dışında: alan adlarını bağımsız değişken olarak alırlar. ile yalnızca sayısal alanlar kullanılabilir. TOPLAM Ve ortalama. İLE SAYMAK, MAKS., Ve DAK hem sayısal hem de karakter alanları kullanılabilir. Karakter alanlarıyla birlikte kullanıldığında MAKS. Ve DAK bunları ASCII eşdeğerlerine çevirecektir. Bu demektir DAK ilkini seçecek ve MAKS. alfabetik sırayla son değer.

      Satış tablosundaki toplam satış miktarını bulmak için aşağıdaki sorguyu yazmamız gerekir:

      Satışlardan SUM(SSum) SEÇİN

      Sonuç olarak, şunu elde ederiz:

      Bu sorgu, Sells tablosunun SNum alanındaki boş olmayan değerlerin sayısını saymıştır. Sorguyu şu şekilde yeniden yazarsak:

      Satışlardan COUNT(SDate) SEÇİN

      Sonra sonuç olarak şunu elde ederiz:

      Tarih SAYISI
      4

      SDate alanındaki değerlerden biri boş bir değere sahip olduğu için ( görünüşte aynı şeyi hesaplarken farklı sorgu sonuçları elde ediliyor. HÜKÜMSÜZ). Bu tür istekleri kullanırken dikkatli olun.