SQL-də Sum funksiyası: SUM. SQL Ümumi Funksiyaları - SUM, MIN, MAX, AVG, COUNT DISTINCT Misal

06.04.2023

Gəlin ümumiləşdirməyi öyrənək. Xeyr, bunlar SQL-in öyrənilməsinin nəticələri deyil, verilənlər bazası cədvəllərinin sütunlarının dəyərlərinin nəticələridir. SQL aqreqat funksiyaları tək nəticə dəyəri yaratmaq üçün sütunun dəyərlərində işləyir. Ən çox istifadə edilən SQL aqreqat funksiyaları SUM, MIN, MAX, AVG və COUNT-dur. Ümumi funksiyaların istifadə edilməli olduğu iki hal var. Birincisi, məcmu funksiyalar özləri tərəfindən istifadə olunur və vahid nəticə dəyərini qaytarır. İkincisi, məcmu funksiyalar SQL GROUP BY bəndi ilə, yəni hər qrupda nəticələnən dəyərləri əldə etmək üçün sahələr (sütunlar) üzrə qruplaşdırma ilə istifadə olunur. Əvvəlcə qruplaşdırmadan məcmu funksiyalardan istifadə hallarına nəzər salın.

SQL SUM funksiyası

SQL SUM funksiyası verilənlər bazası cədvəlindəki sütunun dəyərlərinin cəmini qaytarır. Yalnız dəyərləri ədəd olan sütunlara tətbiq edilə bilər. SQL sorğuları nəticəni əldə etmək üçün belə başlayın:

CƏMİ SEÇİN (SÜTUNADI)...

Bu ifadədən sonra FROM (TABLE_NAME) gəlir və sonra WHERE bəndindən istifadə etməklə şərt müəyyən edilə bilər. Bundan əlavə, DISTINCT yalnız unikal dəyərlərin nəzərə alınacağını göstərmək üçün sütun adına prefiks edilə bilər. Varsayılan olaraq, bütün dəyərlər nəzərə alınır (bunun üçün siz xüsusi olaraq DISTINCT deyil, ALL-ı göstərə bilərsiniz, lakin BÜTÜN sözü isteğe bağlıdır).

Əgər siz bu dərsdən verilənlər bazası sorğularını MS SQL Serverdə yerinə yetirmək istəyirsinizsə, lakin bu DBMS kompüterinizdə quraşdırılmayıbsa, o zaman bu linkdəki təlimatlardan istifadə edərək onu quraşdıra bilərsiniz. .

Əvvəlcə şirkətin məlumat bazası - Company1 ilə işləyəcəyik. Bu verilənlər bazasını, onun cədvəllərini yaratmaq və cədvəlləri verilənlərlə doldurmaq üçün skript bu linkdəki fayldadır .

Misal 1Şirkətin şöbələri və işçiləri haqqında məlumatları ehtiva edən məlumat bazası var. Kadrlar cədvəlində həmçinin işçilərin əmək haqqı məlumatları olan bir sütun var. Cədvəldən seçim aşağıdakı formadadır (şəkili böyütmək üçün siçanın sol düyməsi ilə üzərinə klikləyin):

Bütün maaşların cəmini əldə etmək üçün biz aşağıdakı sorğudan istifadə edirik (MS SQL Serverdə - USE company1; prefiksi ilə):

İşçilərdən SUM (Əmək haqqı) SEÇİN

Bu sorğu 287664.63 dəyərini qaytaracaq.

Və indi . Təlimlərdə biz artıq tapşırıqları çətinləşdirməyə başlayırıq, onları praktikada rast gəlinənlərə yaxınlaşdırırıq.

SQL MIN funksiyası

SQL MIN funksiyası həmçinin dəyərləri ədəd olan sütunlarda işləyir və sütundakı bütün dəyərlərin minimumunu qaytarır. Bu funksiya SUM funksiyasına oxşar sintaksisə malikdir.

Misal 3 Verilənlər bazası və cədvəl 1-ci misaldakı kimidir.

42 nömrəli şöbənin işçilərinin minimum əmək haqqını öyrənmək tələb olunur. Bunun üçün aşağıdakı sorğunu yazırıq (MS SQL Serverdə - USE company1 prefiksi ilə;):

Sorğu 10505.90 dəyərini qaytaracaq.

Və yenidən üçün məşq edin müstəqil qərar . Bu və bir sıra digər məşqlərdə sizə təkcə Heyət cədvəlinə deyil, həm də şirkətin bölmələri haqqında məlumatları ehtiva edən Təşkilat cədvəlinə ehtiyacınız olacaq:


Misal 4 Təşkilat cədvəli şirkətin bölmələri haqqında məlumatları ehtiva edən İşçi cədvəlinə əlavə olunur. Bostonda yerləşən bir şöbədə bir işçinin işlədiyi minimum il sayını göstərin.

SQL MAX funksiyası

SQL MAX funksiyası oxşar işləyir və sütunun bütün dəyərləri arasında maksimum dəyəri müəyyən etmək istədiyiniz zaman istifadə olunan oxşar sintaksisə malikdir.

Misal 5

42 nömrəli şöbənin işçilərinin maksimum əmək haqqını öyrənmək tələb olunur. Bunun üçün aşağıdakı sorğunu yazırıq (MS SQL Serverdə - USE company1 prefiksi ilə;):

Sorğu 18352.80 dəyərini qaytaracaq

Vaxtdır öz müqəddəratını təyin etmək üçün məşqlər.

Misal 6 Yenə də iki masa ilə işləyirik - Heyət və Org. Şöbənin adını və Şərqi şöbələr qrupuna (Bölmə) aid olan şöbədə bir işçinin aldığı komissiyaların maksimum məbləğini göstərin. istifadə edin JOIN (masalara qoşulma) .

SQL AVG funksiyası

Əvvəlki təsvir edilmiş funksiyalar üçün sintaksis haqqında deyilənlər SQL AVG funksiyası haqqında da doğrudur. Bu funksiya bir sütundakı bütün dəyərlərin ortasını qaytarır.

Misal 7 Verilənlər bazası və cədvəl əvvəlki nümunələrdə olduğu kimidir.

42 nömrəli şöbənin işçilərinin orta iş stajını öyrənmək tələb olunsun. Bunun üçün aşağıdakı sorğunu yazırıq (MS SQL Serverdə - USE company1 prefiksi ilə;):

Nəticə 6.33 olacaq

Misal 8 Biz bir masa ilə işləyirik - Heyət. 4 ildən 6 ilə qədər təcrübəsi olan işçilərin orta əmək haqqını göstərin.

SQL COUNT funksiyası

SQL COUNT funksiyası verilənlər bazası cədvəlindəki qeydlərin sayını qaytarır. Sorğuda SELECT COUNT(COLUMNAME) ... təyin etsəniz, nəticə sütun dəyərinin NULL (müəyyən edilməmiş) olduğu qeydlər nəzərə alınmadan qeydlərin sayı olacaqdır. Arqument olaraq ulduz işarəsi istifadə edib başlayın SELECT sorğusu COUNT(*) ..., onda nəticə cədvəlin bütün qeydlərinin (sətirlərinin) sayı olacaq.

Misal 9 Verilənlər bazası və cədvəl əvvəlki nümunələrdə olduğu kimidir.

Siz komissiya alan bütün işçilərin sayını bilmək istəyirsiniz. Comm sütunu dəyərləri NULL olmayan işçilərin sayı aşağıdakı sorğunu qaytaracaq (MS SQL Serverdə - USE şirkəti1 ilə; hazırlanan konstruksiya ilə):

Heyətdən COUNT (Comm) SEÇİN

Nəticə 11 dəyəri olacaq.

Misal 10 Verilənlər bazası və cədvəl əvvəlki nümunələrdə olduğu kimidir.

Cədvəldəki qeydlərin ümumi sayını tapmaq lazımdırsa, onda biz ulduz işarəsi olan sorğudan COUNT funksiyasına arqument kimi istifadə edirik (MS SQL Serverdə - USE company1 prefiksi ilə;):

Heyətdən Sayı (*) SEÇİN

Nəticə 17 dəyəri olacaq.

Sonrakı öz müqəddəratını təyin etmək üçün məşq etmək alt sorğudan istifadə etməlisiniz.

Misal 11. Biz bir masa ilə işləyirik - Heyət. Plains şöbəsində işçilərin sayını göstərin.

SQL GROUP BY ilə funksiyaları birləşdirin

İndi SQL GROUP BY bəndi ilə birlikdə ümumi funksiyaların istifadəsinə baxaq. SQL GROUP BY bəndi əldə edilən dəyərləri verilənlər bazası cədvəlində sütunlar üzrə qruplaşdırmaq üçün istifadə olunur. Saytda var bu operatora ayrıca həsr olunmuş dərs .

Biz “Elan Portalı 1” verilənlər bazası ilə işləyəcəyik. Bu verilənlər bazasını yaratmaq üçün skript, onun cədvəli və verilənlər cədvəlinin doldurulması bu linkdəki fayldadır .

Misal 12. Belə ki, reklam portalının məlumat bazası mövcuddur. Həftə ərzində təqdim edilmiş reklamlar haqqında məlumatları ehtiva edən Reklamlar cədvəlinə malikdir. Kateqoriya sütununda böyük reklam kateqoriyaları (məsələn, Daşınmaz Əmlak) və Hissələr sütununda kateqoriyalara daxil olan daha kiçik hissələr haqqında məlumatlar var (məsələn, Mənzillər və Villalar hissələri Daşınmaz Əmlak kateqoriyasının hissələridir). Vahidlər sütununda təqdim olunan reklamların sayı, Pul sütununda isə reklamların təqdim edilməsi üçün qazanılan pul məbləği göstərilir.

KateqoriyahissəsiVahidlərPul
Nəqliyyatmotorlu nəqliyyat vasitələri110 17600
Daşınmaz əmlakMənzillər89 18690
Daşınmaz əmlakdaçalar57 11970
NəqliyyatMotosikllər131 20960
Tikinti materiallariLövhələr68 7140
Elektrik Mühəndisliyitelevizorlar127 8255
Elektrik MühəndisliyiSoyuducular137 8905
Tikinti materiallariRegips112 11760
AsudəKitablar96 6240
Daşınmaz əmlakEvdə47 9870
AsudəMusiqi117 7605
AsudəOyunlar41 2665

SQL GROUP BY bəndindən istifadə edərək, hər bir kateqoriya üzrə reklam təqdim etməklə əldə edilən pulun miqdarını tapın. Aşağıdakı sorğunu yazırıq (MS SQL Serverdə - USE adportal1 prefiksi ilə;):

Kateqoriyaya görə REKLAM QRUPUDAN PUL KİMİ MƏBLƏĞİ (Pul) SEÇİN

Misal 13 Verilənlər bazası və cədvəl əvvəlki nümunədəki kimidir.

SQL GROUP BY bəndindən istifadə edərək, hər bir kateqoriyanın hansı hissəsində daha çox reklamın olduğunu öyrənin. Aşağıdakı sorğunu yazırıq (MS SQL Serverdə - USE adportal1 prefiksi ilə;):

Kateqoriya, Hissə, MAX (Vid) Kateqoriyaya görə REKLAM QRUPUDAN Maksimum OLARAQ SEÇİN

Nəticə aşağıdakı cədvəl olacaq:

Bir cədvəldə ümumi və fərdi dəyərlər əldə edilə bilər UNION operatorundan istifadə edərək sorğu nəticələrinin birləşdirilməsi .

Relational verilənlər bazası və SQL dili

Arifmetik operatorların istifadəsini və hesablanmış sütunların qurulmasını təsvir edir. COUNT, SUM, AVG, MAX, MIN xülasə (ümumi) funksiyaları nəzərə alınır. Məlumat seçimi sorğularında qruplaşdırmaq üçün GROUP BY operatorundan istifadə nümunəsi verilmişdir. HAVING bəndinin istifadəsini təsvir edir.

Hesablanmış sahələrin qurulması

Ümumiyyətlə, yaratmaq hesablanmış (alınmış) sahə SELECT siyahısında SQL dilinin bəzi ifadələrini göstərməlisiniz. Bu ifadələr toplama, çıxma, vurma və bölmə hesab əməliyyatlarından, həmçinin SQL dilinin daxili funksiyalarından istifadə edir. Siz cədvəlin və ya sorğunun istənilən sütununun (sahəsinin) adını təyin edə bilərsiniz, lakin yalnız müvafiq ifadənin FROM bəndində sadalanan cədvəl və ya sorğunun sütun adından istifadə edin. Mürəkkəb ifadələr qurarkən mötərizələr lazım ola bilər.

SQL standartları AS ifadəsinin istifadə olunduğu nəticə cədvəlinin sütunlarının adlarını açıq şəkildə təyin etməyə imkan verir.

Əşya.Ad, Əşya.Qiymət, Sövdələşmə.Kəmiyyət, Əşya.Qiymət*Ticarət.Məqdəri Əşyadan DAXİLİ SEÇİN Əşyada Ticarətə QOŞULUN.ItemCode=Trade.ItemID Misal 6.1. Hər bir əməliyyat üçün ümumi dəyərin hesablanması.

Misal 6.2. Müştərilərin adları və baş hərfləri olan şirkətlərin siyahısını əldə edin.

Şirkəti SEÇİN, Soyadı+""+ Sol(Ad,1)+"."+Sol(Atasının adı,1)+"."Müştəridən Tam Ad KİMİ Misal 6.2. Müştərilərin adlarını və baş hərflərini göstərən firmaların siyahısının əldə edilməsi.

Sorğu daxili funksiyadan istifadə edir Sol , bu halda mətn dəyişənində soldan bir simvolu kəsməyə imkan verir.

Misal 6.3. Satış ili və ayı ilə məhsulların siyahısını əldə edin.

Element.Ad, İl(Ticarət.Tarix) KİMİ İl, Ay(Ticarət.Tarix) SEÇİN ƏMƏDDƏN AY KİMİ DAXİLİ QOŞULUN Item.ItemID=Trade.ItemID Misal 6.3. Satış ili və ayı ilə məhsulların siyahısını əldə etmək.

Sorğu tarixdən il və ayı çıxarmaq üçün daxili İl və Ay funksiyalarından istifadə edir.

Xülasə funksiyalarından istifadə

İstifadə etməklə xülasə (məcmu) funksiyaları SQL sorğusunda çıxış dəstinin seçilmiş dəyərlər dəsti haqqında bir sıra ümumiləşdirici statistik məlumat əldə edə bilərsiniz.

İstifadəçinin aşağıdakılara çıxışı var xülasə funksiyaları:

  • Count (Expression) - SQL sorğusunun çıxış toplusunda qeydlərin sayını müəyyən edir;
  • Min / Maks (İfadə) - sorğunun müəyyən bir sahəsindəki dəyərlər dəstinin ən kiçik və ən böyüyünü müəyyənləşdirin;
  • Avg (İfadə) - bu funksiya sorğu ilə seçilmiş qeydlərin müəyyən bir sahəsində saxlanılan dəyərlər dəstinin orta dəyərini hesablamağa imkan verir. Bu arifmetik ortadır, yəni. onların sayına bölünən dəyərlərin cəmi.
  • Sum (İfadə) - sorğu ilə seçilmiş qeydlərin müəyyən bir sahəsində olan dəyərlər dəstinin cəmini hesablayır.

Çox vaxt sütun adları ifadə rolunu oynayır. İfadə bir neçə cədvəlin qiymətləri üzrə də qiymətləndirilə bilər.

Bütün bu funksiyalar cədvəlin bir sütununda və ya arifmetik ifadədə olan dəyərlər üzərində işləyir və tək bir dəyər qaytarır. COUNT , MIN və MAX funksiyaları həm ədədi, həm də qeyri-rəqəm sahələrinə tətbiq edilir, SUM və AVG funksiyaları isə COUNT(*) istisna olmaqla, yalnız ədədi sahələr üçün istifadə edilə bilər. Hər hansı bir funksiyanın nəticələrini hesablayarkən əvvəlcə bütün boş dəyərlər xaric edilir, bundan sonra tələb olunan əməliyyat yalnız sütunun qalan xüsusi dəyərlərinə tətbiq edilir. COUNT(*) variantı COUNT funksiyasından istifadənin xüsusi halıdır, onun məqsədi nəticədə yaranan cədvəldəki bütün sətirləri saymaqdır, onların null, dublikat və ya hər hansı digər dəyərlərdən ibarət olmasından asılı olmayaraq.

Ümumi funksiyadan istifadə etməzdən əvvəl dublikat dəyərləri aradan qaldırmaq istəyirsinizsə, funksiya tərifində sütun adından əvvəl DISTINCT açar sözü ilə yazmalısınız. MIN və MAX funksiyaları üçün bunun mənası yoxdur, lakin onun istifadəsi SUM və AVG funksiyalarının nəticələrinə təsir göstərə bilər, ona görə də hər bir konkret halda onun olub-olmadığını əvvəlcədən düşünməlisiniz. Bundan əlavə, DISTINCT açar sözü istənilən sorğuda ən çox bir dəfə göstərilə bilər.

Bunu qeyd etmək çox vacibdir xülasə funksiyaları yalnız SELECT bənd siyahısında və HAVING bəndinin bir hissəsi kimi istifadə edilə bilər. Bütün digər hallarda buna icazə verilmir. SELECT bəndindəki siyahıda varsa xülasə funksiyaları, və sorğu mətnində məlumatların qruplaşdırılmasını təmin edən heç bir GROUP BY bəndi yoxdur, onda SELECT bəndinin siyahısı elementlərinin heç biri sahələrin arqument kimi çıxış etdiyi vəziyyət istisna olmaqla, sahələrə hər hansı istinad daxil edə bilməz. son funksiyalar.

Misal 6.4.İlk elementin adını əlifba sırası ilə müəyyənləşdirin.

Məhsuldan Min_Ad KİMİ Min(İtem.Ad) SEÇİN Misal 6.4. İlk maddə adının əlifba sırası ilə müəyyən edilməsi.

Misal 6.5.Əməliyyatların sayını müəyyənləşdirin.

Ticarətdən Sayı(*) SEÇİN Misal 6.5. Əməliyyatların sayını müəyyənləşdirin.

Misal 6.6. Satılan malların ümumi miqdarını müəyyənləşdirin.

Ticarətdən Məhsul_Kəmiyyəti KİMİ Cəmi(Ticarət.Kəmiyyət) SEÇİN Misal 6.6. Satılan malların ümumi miqdarının müəyyən edilməsi.

Misal 6.7. Satılan əşyanın orta qiymətini müəyyənləşdirin.

Əşyadan Ort_Qiymət KİMİ SEÇİN Ort(Mal.Qiymət) DAXİLİ Ticarətə QOŞULUN Item.ItemID=Trade.ItemID; Misal 6.7. Satılan malların orta qiymətinin müəyyən edilməsi.

Məbləğdən (Məlumat.Qiymət*Ticarət. Miqdarı) Xərc KİMİ SEÇİN DAXİLİ Ticarətə QOŞULUN Item.ItemID=Trade.ItemID Misal 6.8. Satılan malların ümumi dəyərinin hesablanması.

Təklifə görə qruplaşdırın

Sorğular çox vaxt yarımcəmlərin yaradılmasını tələb edir ki, bu da adətən sorğuda "hər biri üçün..." ifadəsi ilə göstərilir. SELECT ifadəsi bu məqsədlə GROUP BY bəndindən istifadə edir. GROUP BY olan sorğu qruplaşdırma sorğusu adlanır, çünki o, SEÇİM əməliyyatından məlumatları qruplaşdırır və sonra hər bir fərdi qrup üçün vahid xülasə cərgəsi yaradır. SQL standartı SELECT bəndinin və GROUP BY bəndinin sıx əlaqəli olmasını tələb edir. SELECT ifadəsində GROUP BY bəndi olduqda, SELECT bəndindəki hər bir siyahı elementi bütün qrup üçün vahid qiymətə malik olmalıdır. Bundan əlavə, SELECT bəndinə yalnız aşağıdakı element növləri daxil ola bilər: sahə adları, xülasə funksiyaları, sabitlər və yuxarıdakı elementlərin birləşmələrini ehtiva edən ifadələr.

SEÇİM bəndində sadalanan bütün sahə adları GROUP BY bəndində də görünməlidir - sütun adının istifadə edildiyi hallar istisna olmaqla son funksiya. Əks qayda doğru deyil - GROUP BY bəndində SELECT bəndinin siyahısında olmayan sütun adları ola bilər.

Əgər WHERE bəndi GROUP BY ilə istifadə olunursa, o zaman əvvəlcə emal edilir və yalnız axtarış şərtini təmin edən sətirlər qruplaşdırılır.

SQL standartı qruplaşdırma zamanı bütün çatışmayan dəyərlərin bərabər hesab edildiyini müəyyən edir. İki cədvəl sətirində eyni qruplaşdırma sütununda NULL və bütün digər boş olmayan qruplaşdırma sütunlarında eyni dəyərlər varsa, onlar eyni qrupda yerləşdirilir.

Misal 6.9. Hər bir müştəri tərəfindən edilən alışların orta həcmini hesablayın.

Client.LastName, Ort(Deal.Quantity) KİMİ SEÇİN Client.ClientID=Transaction.ClientID GROUP BY Client.LastName. Misal 6.9. Hər bir müştəri tərəfindən edilən alışların orta həcminin hesablanması.

“Hər bir müştəri tərəfindən” ifadəsi SQL sorğusunda cümlə kimi əks olunur Client BY QRUP. Soyadı.

Misal 6.10. Hər bir məhsulun hansı məbləğə satıldığını müəyyənləşdirin.

Əşya.Adını, Məbləğini (Məlumat.Qiymət*Ticarət.Məqsədi) Əşyadan Qiymət KİMİ SEÇİN DAXİLİ Ticarətə QOŞULUN Item.ItemID=Trade.ItemID QRUP Əşya.Adı ilə Misal 6.10. Hər bir maddənin məhsulunun satıldığı məbləğin müəyyən edilməsi.

Müştəri.Şirkətini SEÇİN, Müştəri.Şirkətindən Sövdələşmələrin_Sayı (Əqdlərin_Sayı) KİMİ DAXİLİ QOŞULUN Client.ClientId=Trade.ClientID QRUPU Client.Company. Misal 6.11. Hər bir firma tərəfindən həyata keçirilən əməliyyatların sayının hesablanması.

Müştəri.Şirkət, Məbləğ(Ticarət.Miqdar) KİMİ Ümumi_Kəmiyyət, Məbləğ(Mal.Qiymət*Ticarət.Kəmiyyət) Əmtəə DAXİLİ BİRLİKDƏN XƏRÇƏT KİMİ SEÇİN. .Müştəri.Şirkət BY ProductCode QRUPU Misal 6.12. Hər bir şirkət üçün alınmış malların ümumi sayının və onun dəyərinin hesablanması.

Misal 6.13. Hər ay üçün hər bir məhsulun ümumi dəyərini müəyyənləşdirin.

Əşya.Adı,Ay(Ticarət.Tarix) Ay, Məbləğ (Məlumat.Qiymət*Ticarət.Məqsəd) ƏDVDƏN DAXİL SEÇİN Ticarətə QOŞULUN Item.ItemID=Ticarət.ItemID QRUP Əşya.Adı, Ay(Ticarət.Tarixi) ) Misal 6.13. Hər ay üçün hər bir məhsulun ümumi dəyərinin müəyyən edilməsi.

Misal 6.14. Hər ay üçün birinci dərəcəli hər bir maddənin ümumi dəyərini müəyyənləşdirin.

Əşya.Adını,Ayını(Ticarət.Tarixi) Ay, Məbləği(Əşya.Qiymət*Ticarət.Kəmiyyət) DAXİLDƏN DAXİL SEÇİN Item.ItemID=Trade.ItemID HARADA Element.Sort="Birinci" QRUP BY. .Başlıq, Ay(Müqavilə.Tarix) Misal 6.14. Hər ay üçün hər birinci sort məhsulun ümumi dəyərinin müəyyən edilməsi.

TƏKLİF OLAN

HAVING əvvəllər GROUP BY tərəfindən qruplaşdırılmış və HAVING-də göstərilən şərtlərə cavab verən bütün məlumat bloklarını əks etdirir. Bu çıxış dəstini "süzgəcdən keçirmək" üçün əlavə seçimdir.

HAVING-dəki şərtlər HARADA olan şərtlərdən fərqlidir:

  • HAVING nəticə verilənlər bazasından ümumiləşdirilmiş dəyər nəticələri olan qrupları istisna edir;
  • Qruplaşdırma yolu ilə məcmu dəyərlərin hesablanmasından şərtə cavab verməyən qeydləri xaric edir;
  • aqreqat funksiyalar HARADA axtarış şərti ilə müəyyən edilə bilməz.

Misal 6.15.Əməliyyatlarının ümumi sayı üçü keçən firmaları müəyyənləşdirin.

Müştəri.Şirkətini SEÇİN, Sayı(Ticarət.Say) KİMİ MÜŞTƏRİNDƏN ticarətlərin_Sayı DAXİLİ QOŞULUN Client.ClientCode=Trade.ClientID QRUPU Client.Client.Company BY SAYI (Ticarət.Count)>3 Misal 6.15. Əməliyyatların ümumi sayı üçdən çox olan firmaların müəyyən edilməsi.

Misal 6.16. 10.000 rubldan çox satılan malların siyahısını göstərin.

Əşya.Adını, Məbləğini (Məddə.Qiymət*Ticarət.Miqdarı) Əşyadan Qiymət KİMİ SEÇİN DAXİLİ Ticarətə QOŞULUN Maddə.Item.ItemID=Ticarət.Eşya İD QRUPU OLAN Maddə.Adı (Məlumat.Qiymət*Ticarət.Miqdarı)>1000 Misal 6.16. 10.000 rubldan çox satılan malların siyahısı göstərilir.

Misal 6.17. Məbləği göstərmədən 10.000-dən yuxarı satılan məhsulların siyahısını göstərin.

Element.Adını EŞYADAN SEÇİN DAXİLİ Ticarətə QOŞULUN Item.ItemCode=Ticarət.ItemID QRUP OLAN Maddə.Ad Məbləğ (Məlumat.Qiymət*Ticarət.Kəmiyyət)>10000 Misal 6.17. Məbləği göstərmədən 10.000-dən yuxarı satılan məhsulların siyahısını göstərin.

Bu dərslikdə siz necə istifadə edəcəyinizi öyrənəcəksiniz SUM funksiyası SQL Serverdə (Transact-SQL) sintaksis və nümunələrlə.

Təsvir

SQL Serverdə (Transact-SQL) SUM funksiyası ifadənin ümumi dəyərini qaytarır.

Sintaksis

SQL Serverdə (Transact-SQL) SUM funksiyası üçün sintaksis belədir:

Və ya nəticələri bir və ya bir neçə sütun üzrə qruplaşdırarkən SUM funksiyasının sintaksisi:

Seçimlər və ya Arqumentlər

ifadə1 , ifadə2 , ... ifadə_n SUM funksiyasına daxil olmayan ifadələrdir və SQL ifadəsinin sonunda GROUP BY bəndinə daxil edilməlidir.
ümumi_ifadə cəmlənəcək sütun və ya ifadədir.
cədvəllər - qeydlər əldə etmək istədiyiniz cədvəllər. FROM bəndində sadalanan ən azı bir cədvəl olmalıdır.
WHERE şərtləri - isteğe bağlıdır. Bunlar seçilmiş qeydlər üçün yerinə yetirilməli olan şərtlərdir.

Ərizə

SUM funksiyası SQL Serverin (Transact-SQL) aşağıdakı versiyalarında istifadə edilə bilər:
SQL Server vNext, SQL Server 2016, SQL Server 2015, SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008, SQL Server 2005

Tək sahə nümunəsi

Bəzilərini nəzərdən keçirək SQL nümunələri SQL Serverdə (Transact-SQL) SUM funksiyasından necə istifadə edəcəyinizi anlamaq üçün Server SUM funksiyası.

Məsələn, sayı 10-dan çox olan bütün məhsulların ümumi sayının necə olduğunu öyrənə bilərsiniz.

Bu SUM funksiyası nümunəsində biz SUM(kəmiyyət) ifadəsini "Ümumi Kəmiyyət" adlandırdıq. Nəticə dəstini qaytararkən - sahə adı kimi "Total Quantity" göstərilir.

FƏRQLİ misal

SUM funksiyasında DISTINCT ifadəsindən istifadə edə bilərsiniz. Məsələn, aşağıdakı SQL ifadəsi maaşın ümumi məbləğini qaytarır unikal dəyərlərəmək haqqı , burada əmək haqqı ildə 29,000 dollardan aşağıdır.

Əgər iki əmək haqqı ildə 24.000 ABŞ dolları olsaydı, bu dəyərlərdən yalnız biri SUM funksiyasında istifadə olunacaqdı.

Formula nümunəsi

SUM funksiyasındakı ifadənin tək sahə olması lazım deyil. Formuladan da istifadə edə bilərsiniz. Məsələn, ümumi komissiyanı hesablaya bilərsiniz.

Transact SQL

Sifarişlərdən "Ümumi Komissiya" KİMİ SUM(satış * 0,03) SEÇİN;

SUM (satış * 0,03 ) "Ümumi Komissiya" KİMİ SEÇİN

Sifarişlərdən;

Nümunəyə görə qruplaşdırın

Bəzi hallarda SUM funksiyası ilə GROUP BY bəndindən istifadə etməli olacaqsınız.

SQL - Dərs 11. Xülasə funksiyaları, hesablanmış sütunlar və görünüşlər

Yekun funksiyalara statistik, məcmu və ya cəmləmə də deyilir. Bu funksiyalar saymaq və tək dəyəri qaytarmaq üçün bir sıra sıraları emal edir. Beş belə funksiya var:
  • AVG() Funksiya sütunun orta qiymətini qaytarır.

  • COUNT() Funksiya sütundakı sətirlərin sayını qaytarır.

  • MAX() Funksiya sütundakı ən böyük dəyəri qaytarır.

  • MIN() Funksiya sütundakı ən kiçik dəyəri qaytarır.

  • SUM() Funksiya sütun dəyərlərinin cəmini qaytarır.

Onlardan biri - COUNT() - biz artıq 8-ci dərsdə tanış olmuşuq. İndi qalanları ilə tanış olaq. Tutaq ki, mağazamızda kitabların minimum, maksimum və orta qiymətini bilmək istədik. Sonra Qiymətlər (qiymətlər) cədvəlindən qiymət sütunu üçün minimum, maksimum və orta dəyərləri götürməlisiniz. Müraciət sadədir:

Qiymətlərdən MIN(qiymət), MAX(qiymət), AVG(qiymət) SEÇİN;

İndi biz "Matbaa" (id=2) tədarükçüsü bizə malı neçəyə gətirdiyini öyrənmək istəyirik. Belə bir müraciət etmək asan deyil. Bunu necə edəcəyimizi düşünək:

1. Əvvəlcə Çatdırılmalar (daxil olanlar) cədvəlindən “Çap evi” təchizatçısı (id=2) tərəfindən həyata keçirilmiş çatdırılmaların identifikatorlarını (id_incoming) seçməlisiniz:

2. İndi Supply Journal cədvəlindən (jurnal_incoming) 1-ci bənddə tapılan çatdırılmalarda həyata keçirilən malları (id_məhsul) və onların miqdarını (miqdarını) seçməlisiniz. Yəni 1-ci bənddəki sorğu yuvaya çevrilir:

3. İndi ortaya çıxan cədvələ qiymətlər cədvəlində saxlanılan tapılan malların qiymətlərini əlavə etməliyik. Yəni, id_product sütunu ilə Təchizat jurnalı (jurnal_daxil olan) və Qiymətlər (qiymətlər) cədvəllərinə qoşulmalıyıq:

4. Alınan cədvəldə Cəmi sütunu aydın şəkildə yoxdur, yəni hesablanmış sütun. Belə sütunlar yaratmaq imkanı MySQL-də təmin edilir. Bunu etmək üçün sadəcə sorğuda hesablanmış sütunun adını və nəyi hesablamalı olduğunu göstərməlisiniz. Bizim nümunəmizdə belə bir sütun summa adlanacaq və o, kəmiyyət və qiymət sütunlarının məhsulunu hesablayacaq. Yeni sütunun adı AS sözü ilə ayrılır:

jurnalın_incoming.id_məhsulunu, magazin_incoming.miqdarını, qiymətlər.qiyməti, jurnalın_gələn.miqdarını*qiymətlər.qiyməti SEÇİN JURNAL_GƏLƏNLƏRİNDƏN, qiymətlər YERDƏ jurnalın_incoming.id_product= qiymətlər.id_məhsul VƏ ID_incoming=WHERE ID_incoming=gələn FROM);

5. Əla, bizə qalan yalnız yekun sütununu yekunlaşdırmaq və nəhayət, tədarükçünün "Matbaa"nın bizə nə qədər mal gətirdiyini öyrənməkdir. SUM() funksiyasından istifadə sintaksisi aşağıdakı kimidir:

Cədvəl_adından SUM(sütun_adı) SEÇİN;

Biz sütunun adını bilirik - summa, lakin sorğunun nəticəsi olduğu üçün cədvəlin adı bizdə yoxdur. Nə etməli? Belə hallar üçün MySQL-də Baxışlar var. Görünüş unikal ad verilən və sonradan istifadə üçün verilənlər bazasında saxlanıla bilən seçilmiş sorğudur.

Görünüş yaratmaq üçün sintaksis aşağıdakı kimidir:

Sorğu AS GÖRÜNÜŞ_adını YARAT;

Sorğumuzu report_vendor adlı görünüş kimi yadda saxlayaq:

report_vendor GÖRÜNTÜ YARATIN magazin_incoming.id_product, magazin_incoming.quantity, prices.price, magazin_incoming.quantity*prices.price JURNAL_INcoming, WHERE magazine_incoming.id_product=Flight.id_product=WHERE magazine_incoming.quantity, qiymətlər id_vendor=2 );

6. İndi siz yekun SUM() funksiyasından istifadə edə bilərsiniz:

report_vendor FROM CƏMİ(cəm) SEÇİN;

Burada nəticə əldə etdik, baxmayaraq ki, bunun üçün iç içə sorğular, birləşmələr, hesablanmış sütunlar və görünüşlərdən istifadə etməli olduq. Bəli, nəticə əldə etmək üçün bəzən düşünməli olursan, onsuz heç yerə gedə bilməzsən. Ancaq iki çox vacib mövzuya - hesablanmış sütunlara və baxışlara toxunduq. Onlar haqqında daha ətraflı danışaq.

Hesablanmış sahələr (sütunlar)

Məsələn, biz bu gün riyazi hesablanmış sahəni nəzərdən keçirdik. Burada əlavə etmək istərdim ki, siz təkcə vurma əməliyyatından (*) deyil, həm də çıxma (-) və toplama (+) və bölmə (/) əməliyyatlarından da istifadə edə bilərsiniz. Sintaksis aşağıdakı kimidir:

col_name_1, col_name_2, col_name_1*col_name_2 AS computed_column_name FROM table_name;

İkinci nüans AS açar sözüdür, biz ondan hesablanmış sütunun adını təyin etmək üçün istifadə etdik. Əslində, bu açar söz istənilən sütun üçün ləqəblər təyin edir. Bu niyə lazımdır? Kodun azaldılması və oxunaqlılığı üçün. Məsələn, baxışımız belə görünə bilər:

A.id_məhsul, A.miqdar, B.qiymət, A.miqdar*B.qiyməti A AS MAGAZİNE_daxil olan yekun KİMİ GÖRÜNÜŞ YARATIN, qiymətlər B HARƏDƏ A.id_məhsul= B.id_məhsul VƏ id_incoming= (daxil olan identifikatoru SEÇİN) WHERE id_vendor=2);

Razılaşın ki, bu daha qısa və aydındır.

Nümayəndəlik

Görünüş yaratmaq üçün sintaksisi artıq nəzərdən keçirdik. Görünüşlər yaradıldıqdan sonra onlar cədvəllər kimi istifadə oluna bilər. Yəni onlara sorğular aparın, məlumatları süzün və çeşidləyin, bir görünüşü digəri ilə birləşdirin. Bir tərəfdən, bu, tez-tez istifadə olunanları saxlamaq üçün çox əlverişli bir yoldur mürəkkəb sorğular(bizim nümunəmizdə olduğu kimi).

Ancaq yadda saxlamaq lazımdır ki, görünüşlər cədvəllər deyil, yəni məlumatları saxlamırlar, ancaq onu digər cədvəllərdən alırlar. Beləliklə, birincisi, cədvəllərdəki məlumatları dəyişdirərkən təqdimatın nəticələri də dəyişəcəkdir. İkincisi, görünüş tələb edildikdə, lazımi məlumatlar axtarılır, yəni DBMS-nin performansı azalır. Ona görə də onlardan sui-istifadə edilməməlidir.

Müəyyən bir satıcı tərəfindən istehsal olunan kompüter modellərinin sayını necə öyrənə bilərəm? Eyni olan kompüterlərin orta qiymətini necə müəyyən etmək olar spesifikasiyalar? Bəzi statistik məlumatlarla bağlı bu və bir çox digər sualların köməyi ilə cavablandırıla bilər xülasə (məcmu) funksiyaları. Standart aşağıdakı ümumi funksiyaları təmin edir:

Bu funksiyaların hamısı bir dəyər qaytarır. Eyni zamanda, funksiyalar COUNT, MINMAX hər hansı bir məlumat növü üçün tətbiq edilir SUMAVG yalnız rəqəmsal sahələr üçün istifadə olunur. Funksiya arasındakı fərq COUNT(*)COUNT(<имя поля>) ikincisi hesablama zamanı NULL dəyərləri nəzərə almır.

Misal. Fərdi kompüterlərin minimum və maksimum qiymətini tapın:

Misal. İstehsalçı A tərəfindən istehsal olunan kompüterlərin mövcud sayını tapın:

Misal. Əgər A istehsalçısı tərəfindən istehsal olunan müxtəlif modellərin sayı ilə maraqlanırıqsa, sorğu aşağıdakı kimi tərtib edilə bilər (hər bir modelin Məhsul cədvəlində bir dəfə qeyd olunmasından istifadə etməklə):

Misal. İstehsalçı A tərəfindən istehsal olunan mövcud müxtəlif modellərin sayını tapın. Sorğu əvvəlkinə bənzəyir, burada istehsalçı A tərəfindən istehsal olunan modellərin ümumi sayını müəyyən etmək tələb olunurdu. Burada müxtəlif modellərin sayını tapmaq tələb olunur. PC cədvəlində (yəni satış üçün mövcuddur).

Statistik göstəriciləri əldə edərkən yalnız unikal dəyərlərdən istifadə edilməsini təmin etmək üçün məcmu funksiya arqumenti istifadə edilə bilər DISTINCT parametri. Başqa parametr ALL standartdır və sütundakı bütün qaytarılan dəyərləri saymağı gözləyir. Operator,

PC tərəfindən istehsal edilən modellərin sayını almaq lazımdırsa hər biri istehsalçıdan istifadə etməli olacaqsınız Təklifə görə qruplaşdırın, sintaktik şəkildə sonra WHERE bəndləri.

Təklifə görə qruplaşdırın

Təklifə görə qruplaşdırın tətbiq oluna bilən çıxış xətlərinin qruplarını müəyyən etmək üçün istifadə olunur ümumi funksiyalar (COUNT, MIN, MAX, AVG və SUM). Əgər bu bənd yoxdursa və aqreqat funksiyalardan istifadə edilirsə, o zaman adları qeyd olunan bütün sütunlar SEÇİN, daxil edilməlidir məcmu funksiyalar, və bu funksiyalar sorğu predikatını təmin edən bütün sətirlər dəstinə tətbiq olunacaq. Əks halda, SELECT siyahısının bütün sütunları, daxil deyil aqreqat funksiyalara, müəyyən edilməlidir V QRUP təklif edir BY. Nəticədə, sorğunun bütün çıxış sətirləri bu sütunlardakı dəyərlərin eyni birləşmələri ilə xarakterizə olunan qruplara bölünür. Bundan sonra hər qrupa ümumi funksiyalar tətbiq olunacaq. Qeyd edək ki, GROUP BY üçün bütün NULL dəyərlər bərabər hesab olunur, yəni. NULL dəyərlərindən ibarət sahə ilə qruplaşdırıldıqda, bütün belə sətirlər bir qrupa düşəcək.
Əgər GROUP BY bəndi varsa, SELECT bəndində ümumi funksiyalar yoxdur, onda sorğu sadəcə olaraq hər qrupdan bir sıra qaytaracaq. Bu xüsusiyyət DISTINCT açar sözü ilə birlikdə nəticə dəstində dublikat sətirləri aradan qaldırmaq üçün istifadə edilə bilər.
Sadə bir nümunəyə nəzər salın:
SELECT model, COUNT(model) AS Qty_model, AVG(qiymət) AS Ort_price
PCDƏN
QRUP BY model;

Bu sorğuda hər bir PC modeli üçün onların sayı və orta qiyməti müəyyən edilir. Eyni model dəyəri (model nömrəsi) olan bütün sətirlər bir qrup təşkil edir və SELECT çıxışı hər bir qrup üçün dəyərlərin sayını və orta qiymət dəyərlərini hesablayır. Sorğunun nəticəsi aşağıdakı cədvəl olacaq:
model Qty_model Orta_qiymət
1121 3 850.0
1232 4 425.0
1233 3 843.33333333333337
1260 1 350.0

Əgər SEÇİM-də tarixi olan sütun olsaydı, o zaman hər bir konkret tarix üçün bu göstəriciləri hesablamaq mümkün olardı. Bunu etmək üçün tarixi qruplaşdırma sütunu kimi əlavə etməlisiniz və sonra ümumi funksiyalar dəyərlərin hər birləşməsi (model-tarix) üçün hesablanacaqdır.

Bir neçə konkret var məcmu funksiyaların yerinə yetirilməsi qaydaları:

  • Əgər sorğu nəticəsində sıra alınmadı(və ya bu qrup üçün birdən çox sıra), onda hər hansı məcmu funksiyaların hesablanması üçün ilkin məlumat yoxdur. Bu halda COUNT funksiyalarının icrasının nəticəsi sıfır, digər bütün funksiyaların nəticəsi isə NULL olacaqdır.
  • Arqument məcmu funksiya özündə məcmu funksiyaları ehtiva edə bilməz(funksiyadan funksiya). Bunlar. bir sorğuda maksimum orta dəyərləri almaq mümkün deyil.
  • COUNT funksiyasının icrasının nəticəsidir tam(TAM). Digər məcmu funksiyalar işlənmiş dəyərlərin məlumat növlərini miras alır.
  • SUM funksiyasını yerinə yetirərkən istifadə olunan məlumat növünün maksimum dəyərini aşan nəticə əldə edilərsə, səhv.

Belə ki, əgər sorğu ehtiva etmir GROUP BY təkliflər, Bu məcmu funksiyalar daxil SELECT bəndi, bütün nəticələnən sorğu sətirlərində icra olunur. Əgər sorğu ehtiva edirsə Təklifə görə qruplaşdırın, göstərilən sütun və ya sütunlar qrupunun eyni dəyərlərinə malik olan hər bir sıra dəsti GROUP BY təklif edin, bir qrup təşkil edir və məcmu funksiyalar hər qrup üçün ayrıca həyata keçirilir.

TƏKLİF OLAN

Əgər WHERE bəndi simli filtrləmə üçün predikatı təyin edir, sonra HAVING bəndi tətbiq edilir qruplaşdırdıqdan sonra oxşar predikatı dəyərlərə görə filtrləmə qruplarını müəyyən etmək məcmu funksiyalar. Bu bənd əldə edilən dəyərləri təsdiqləmək üçün lazımdır məcmu funksiya-də müəyyən edilmiş qeyd mənbəyinin ayrı-ayrı sıralarından deyil FROM bəndi, və dən belə xətlərin qrupları. Buna görə də, belə bir çek daxil edilə bilməz WHERE bəndi.