Aqreqat funksiyaların köməkliyi ilə verilənlərin ümumiləşdirilməsi

Bu addımda biz qrup qiymətləri götürüb bir qiyətə gətirən aqreqat funksiyaların istifadəsinə keçəcəyik.

SQL Server bir neçə aqreqat funksiya təklif edir.

  • COUNT - Verilmiş suala uyğun gələn sətirlərin sayını verir
  • SUM - Sütunda olan bütün qiymətləri cəmləyir.
  • AVG - Bütün qiymətlərin riyazi ortasını tapır.
  • MAX - Seçilmiş qiymətlərdən ən böyüyünü tapır
  • MIN - Seçilmiş qiymətlərdən ən kiçiyini tapır

SUMAVG funksiyaları yalnız ədədi sətirlər üçün tətbiq olunandırlar. COUNT, MAX, MIN ilə ədədi və simvol sətirlər istifadə oluna bilər. Simvol sətirlərlə istifadə olunanda MIN, MAX dəyişənləri alfavit sırası üzrə müqayisə edir. Aqreqat funksiyalar öz işlərində NULL qiymətini nəzərə almırlar.
Orders cədvəlindəki bütün sifarişçilərin cəmini tapmaq üçün aşağıdakı sualı vermək lazımdır:

SELECT SUM( amt )
FROM Orders

Nəticə:

---------------------
26658.4000

COUNT funksiyası digərlərindən bir az fərqlənir. O verilmiş sütunun və ya cədvəlin sətirlərinin sayını hesablayır. Məs: Orders cədvəlinə yazılmış ticarət agentlərinin sayını hesablayaq.

SELECT COUNT( DISTINCT snum )
FROM Orders

Nəticə:

----------- 
5

Fikir verin ki sorğuda DISTINCT açar sözündən istifadə olunmuşdur, bu vaxtı agentlərin yalnız unikal nömrələri hesablanır. Əgər bu açar sözü yazılmasaydı onda nəticə aşağıdakı kimi olacaqdı:

----------- 
10

Əgər cədvəldə bütün sətirlərin sayını hesablamaq lazım gələrsə, onda sorğuda COUNT funkiyasında sütun yernə ulduz işarəsi qoymaq lazımdır:

SELECT COUNT(*)
FROM Customers

Nəticə:

-----------
7

GROUP BY təklifi sizə aqreqat funksiyanın dəyişməsi üçün lazım olan çoxluq verir. O SELECT ifadəsinin daxilində sətir və aqreqat funksiyaları cəmləndirmək imkanı verir. Tutaq ki sizə hər bir ticarət agenti tərəfindən alınmış ən böyük sifarişi tapmaq lazımdır:

SELECT snum, MAX( amt )
FROM Orders
GROUP BY snum

Bu sualın nəticəsi:

snum             
----- ---------- 
1001  9891.8800
1002  5160.4500
1003  1713.2300
1004  1900.1000
1007  1098.1600

GROUP BY aqreqat funksiyaları yazı qruplarından aslı olmayaraq tətbiq edilir. Qrupların formalaşması qaydası - sətirlərin eyni qiymətləridir (verilmiş halda snum). Verilmiş sualı realizə edərkən MAX funksiyası hər bir snum qiyməti üçün hesablanır.
GROUP BY-ı bir neçə sətir ilə hesablamaq olar. Əvvəlki sualı çətinləşdirək:

SELECT snum, odate, MAX( amt )
FROM Orders
GROUP BY snum, odate

Yəni biz hər bir tarix ilə qəbul olunmuş agentlərin kod və maksimal qiymətlərini hesablayırıq.

snum  odate
----- ------------------------ ----------
1001  1999-10-03 00:00:00.000  767.1900
1001  1999-10-05 00:00:00.000  4723.0000
1001  1999-10-06 00:00:00.000  9891.8800
1002  1999-10-03 00:00:00.000  5160.4500
1002  1999-10-04 00:00:00.000  75.7500
1002  1999-10-06 00:00:00.000  1309.9500
1003  1999-10-04 00:00:00.000  1713.2300
1004  1999-10-03 00:00:00.000  1900.1000
1007  1999-10-03 00:00:00.000  1098.1600

Təbii ki sifariş olmayan günlər görünməyəcək.

Tapşırığı çətinləşdirək: İndi 3000-dən böyük olan hər bir agentin maksimal cəmini tapaq. Bu cür effektə nail olmaq üçün HAVING təklifindən istifadə olunur, hansı ki meyar təyin edir, WHERE təklifinin ayrıca nəticələr üçün etdiyi nəticə qrupundan pozulması üçün. Bu bu cür edilir:

SELECT snum, odate, MAX( amt )
FROM ORDERS
GROUP BY snum, odate
HAVING MAX( amt ) > 3000
snum  odate
----- ------------------------ ----------
1002  1999-10-03 00:00:00.000  5160.4500
1001  1999-10-05 00:00:00.000  4723.0000
1001  1999-10-06 00:00:00.000  9891.8800

Aqreqat funksiyaları təkcə VB-dən təyin olunmuş məlumatları seçmək üçün deyil, həm də onların ümumiləşdirilməsi və analizi üçün də istifadə olunurlar. İrəlidə biz bir neçə cədvəldən məlumatların seçilmısi ilə tanış olacağıq.

«« SELECT - müqayisə, məntiqi və xüsusi operatorlar    Aqreqat funksiyaların köməkliyi ilə verilənlərin ümumiləşdirilməsi    Bir necə cədvəldən verilənlərin seçilməsi »»
Share


Tərcümə edən: Rəşad Əliyev


YER Hostinq

Pulsuz elanlar saytı

Internet Jobs Database