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ı 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ı 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ı 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) .
Ə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ı 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.
İ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.
Kateqoriya | hissəsi | Vahidlər | Pul |
Nəqliyyat | motorlu nəqliyyat vasitələri | 110 | 17600 |
Daşınmaz əmlak | Mənzillər | 89 | 18690 |
Daşınmaz əmlak | daçalar | 57 | 11970 |
Nəqliyyat | Motosikllər | 131 | 20960 |
Tikinti materiallari | Lövhələr | 68 | 7140 |
Elektrik Mühəndisliyi | televizorlar | 127 | 8255 |
Elektrik Mühəndisliyi | Soyuducular | 137 | 8905 |
Tikinti materiallari | Regips | 112 | 11760 |
Asudə | Kitablar | 96 | 6240 |
Daşınmaz əmlak | Evdə | 47 | 9870 |
Asudə | Musiqi | 117 | 7605 |
Asudə | Oyunlar | 41 | 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.Ü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.
İ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ı:
Ç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ı.
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.
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:
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ə.
SQL Serverdə (Transact-SQL) SUM funksiyası ifadənin ümumi dəyərini qaytarır.
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:
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.
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
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.
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ı.
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; |
Bəzi hallarda SUM funksiyası ilə GROUP BY bəndindən istifadə etməli olacaqsınız.
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.
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.
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, MIN Və MAX hər hansı bir məlumat növü üçün tətbiq edilir SUM Və AVG yalnız rəqəmsal sahələr üçün istifadə olunur. Funksiya arasındakı fərq COUNT(*) Və 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.
SELECT model, COUNT(model) AS Qty_model, AVG(qiymət) AS Ort_price PCDƏN QRUP BY model; |
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ı:
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.
Ə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.