CodeGym /Kurslar /SQL SELF /Orta qiymətlər AVG() — sütunlar üzrə orta q...

Orta qiymətlər AVG() — sütunlar üzrə orta qiymətin hesablanması

SQL SELF
Səviyyə , Dərs
Mövcuddur

Ə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()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 = 3id = 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.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION