Əgər sən heç vaxt imtahan ballarının ortasını və ya məsələn, şöbədə orta maaşı hesablamağa çalışmısansa, artıq orta arifmetik anlayışı ilə tanışsan. Ümumiyyətlə, bunu məktəbdə tez-tez öyrədirlər. SQL-də dataset-də orta qiymətin hesablanması ilə bağlı istənilən məsələ AVG() funksiyası ilə həll olunur.
AVG() funksiyası — bu, rəqəmsal sütun üçün orta arifmetiki hesablayan aggregate funksiyadır. O, göstərilən sütundakı bütün qiymətləri toplayır və nəticəni həmin qiymətlərin sayına bölür. NULL-a fikir vermir (və bu ignore, qəribə olsa da, həyatı asanlaşdırır, amma bu barədə bir az sonra danışacağıq).
AVG() sintaksisi
Gəlin əsas sintaksisdən başlayaq:
SELECT AVG(sutun)
FROM cedvel;
Diqqət et: burada sutun — orta qiymətini tapmaq istədiyin rəqəmsal dəyərləri saxlayan sütundur.
Nümunə 1: İşçilərin orta maaşı
Təsəvvür elə ki, bizdə employees adlı cədvəl var, burada işçilər və onların maaşları saxlanılır:
| id | name | salary |
|---|---|---|
| 1 | Otto | 50000 |
| 2 | Maria | 60000 |
| 3 | Alex | 55000 |
| 4 | Anna | NULL |
| 5 | Dan | 52000 |
Orta maaşı hesablamaq üçün sadə sorğu:
SELECT AVG(salary) AS average_salary
FROM employees;
Nəticə:
| average_salary |
|---|
| 54250 |
Bu necə işləyir?
AVG()bütün maaş dəyərlərini toplayır: 50000 + 60000 + 55000 + 52000 = 217000.- Cəmi NULL olmayan dəyərlərin sayına bölür: 217000 / 4 = 54250.
AVG() və NULL ilə işləməyin özəllikləri
Fikir vermisən ki, orta maaş hesablananda salary sütunundakı NULL dəyəri nəzərə alınmadı. Bu, AVG()-nin əsas özəlliyidir. O, yalnız NULL olmayan dəyərləri nəzərə alır.
Gəlin bir nümunəyə baxaq:
SELECT AVG(NULL) AS netice;
Nəticə:
| netice |
|---|
| NULL |
Bu bir daha göstərir ki, AVG() NULL-u ignore edir. Amma əgər bütün dataset NULL-dan ibarətdirsə, nəticə də NULL olacaq.
Amma əgər cədvəldə NULL yox, 0 olsa, bu nəticə ignore olunmayacaq.
employees cədvəli
| id | salary |
|---|---|
| 1 | 1000 |
| 2 | 0 |
| 3 | NULL |
| 4 | 2000 |
SQL-sorğu:
SELECT AVG(salary) AS avg_salary
FROM employees;
Nəticə:
| avg_salary |
|---|
| 1000 |
Niyə belədir?
Çünki AVG() belə hesablayır:
[(1000 + 0 + 2000) / 3 = 1000]
NULL olan sətir orta hesabda nəzərə alınmır.
Nümunə: Tələbələrin orta yaşının hesablanması
İndi students cədvəlinə baxaq:
| id | name | age |
|---|---|---|
| 1 | Anna | 20 |
| 2 | Max | 22 |
| 3 | Maria | NULL |
| 4 | Otto | 21 |
Sorğu:
SELECT AVG(age) AS average_age
FROM students;
Nəticə:
| average_age |
|---|
| 21 |
AVG()tələbə Maria-nı ignore edir, çünki onun yaşı NULL göstərilib.- Orta qiymət belə hesablanır: (20 + 22 + 21) / 3 = 21.
Nəticənin yuvarlaqlaşdırılması
Bəzən AVG() nəticəsi vergüldən sonra bir neçə rəqəmli onluq verir.
Əgər sənə yuvarlaqlaşdırılmış rəqəm lazımdırsa, ROUND() funksiyasından istifadə edə bilərsən.
employees cədvəli
| id | salary |
|---|---|
| 1 | 50000 |
| 2 | 60000 |
| 3 | 47000 |
| 4 | NULL |
SQL-sorğu
SELECT ROUND(AVG(salary), 2) AS rounded_average_salary
FROM employees;
Nəticə
| rounded_average_salary |
|---|
| 52333.33 |
NULL olan sətir hesabdan çıxarılır, ona görə də orta üç dəyərə görə hesablanır.
AVG() hesablamadan əvvəl datanın filterlənməsi
Əgər sənə yalnız müəyyən şərtlərə uyğun dəyərlər üçün orta hesab lazımdırsa, WHERE istifadə et.
employees cədvəli
| id | salary |
|---|---|
| 1 | 50000 |
| 2 | 60000 |
| 3 | 47000 |
| 4 | 60000 |
| 5 | NULL |
Nümunə: id > 2 olan işçilərin orta maaşını tapırıq.
SELECT AVG(salary) AS average_salary
FROM employees
WHERE id > 2;
Nəticə
| average_salary |
|---|
| 53500 |
Hesablamada yalnız id = 3 və id = 4 olan maaşlar iştirak edir. NULL olan sətir çıxarılır.
Nümunə: AVG() ilə mürəkkəb sorğular
AVG() funksiyasını başqa aggregate funksiyalar və operatorlarla birləşdirmək mümkündür.
Tutaq ki, bizdə sales adlı satış cədvəli var:
| sale_id | product | quantity | price |
|---|---|---|---|
| 1 | Telefon | 2 | 500 |
| 2 | Noutbuk | 1 | 1500 |
| 3 | Planshet | 3 | 300 |
Orta ümumi satış məbləğini hesablamaq üçün sorğu:
SELECT AVG(quantity * price) AS average_total_sale
FROM sales;
Nəticə:
| averagetotalsale |
|---|
| 950 |
Həyati lifehack-lar və tipik səhvlər
AVG() ilə işləyəndə diqqətli olmaq lazımdır ki, yayğın səhvlərə yol verməyəsən:
NULL-dəyərlər: bəzən nəticə gözlədiyindən az çıxır və təəccübləndirir. Yadda saxla ki, AVG() NULL olan sətirləri atlayır.
Data type-ların qarışması: əgər sütunda rəqəm və mətn qarışıbsa (bu, ümumiyyətlə, pis practice-dir), AVG() error verəcək.
GO TO FULL VERSION