CodeGym /Kurslar /SQL SELF /SQL-də ədədi funksiyalar: yuvarlaqlaşdırma, qalıq, qüvvət...

SQL-də ədədi funksiyalar: yuvarlaqlaşdırma, qalıq, qüvvət və kök

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

SQL təkcə mətn və cədvəllər üçün deyil. Real verilənlər bazalarında tez-tez qiymətlər, miqdarlar, ballar, faizlər, koordinatlar kimi ədədlərlə işləmək lazım olur. Təsəvvür elə:

  • Endirimləri hesablayırsan və məbləği tam ədədə yuvarlaqlaşdırmaq istəyirsən.
  • Tək/cüt tələbələr üzrə məlumat çıxarmaq istəyirsən.
  • Qiymətlər üzrə analitika aparırsan və dispersiyanın kvadrat kökünü bilmək istəyirsən.
  • Və ya balların hesablanması üçün formulalar qurursan və qüvvətə yüksəltmə istifadə edirsən.

SQL bunların öhdəsindən xarici proqramlaşdırma dilləri olmadan da gələ bilir — bunların hamısını birbaşa sorğularda daxili matematik funksiyalar ilə etmək olur. Bu gün ən faydalı altısını öyrənəcəyik:

  • ROUND() — yuvarlaqlaşdırma
  • CEIL() — yuxarıya yuvarlaqlaşdırma
  • FLOOR() — aşağıya yuvarlaqlaşdırma
  • MOD() — bölmədən qalıq
  • POWER() — qüvvətə yüksəltmə
  • SQRT() — kvadrat kök

* Ədədlərin yuvarlaqlaşdırılması: ROUND(), CEIL(), FLOOR()*

Çox vaxt onluq ədədlərlə işləyəndə (məsələn, 4.67891) nəticəni yuvarlaqlaşdırmaq lazımdır. Məsələn, orta qiymət, sifarişin yekun məbləği, endirim faizi və s. hesablayanda — vergüldən sonrakı artıq rəqəmlər həm görünüşü "korlayır", həm də çaşdırıcı ola bilər.

ROUND() — riyazi qaydalara görə yuvarlaqlaşdırma

ROUND(number [, digits])
  • number — yuvarlaqlaşdırdığımız ədəd.
  • digits (istəyə bağlı) — vergüldən sonra neçə rəqəm qalacaq.

Nümunələr:

SELECT ROUND(4.67);       -- 5
SELECT ROUND(4.6789, 2);  -- 4.68

ROUND() adi riyaziyyatda olduğu kimi işləyir: 4.5 → 5, 4.49 → 4.

Çox faydalıdır, əgər pulla və ya ballarla işləyirsənsə və onları gözəl göstərmək lazımdır: 4.33333 → 4.33.

CEIL() — ən yaxın yuxarı tam ədədə yuvarlaqlaşdırma

SELECT CEIL(4.1);  -- 5
  • Əgər ədəd artıq tamdırsa, nəticə dəyişmir.
  • Həmişə tam ədəd qaytarır, əsas ədəddən kiçik olmur.

Məsələn, məhsulları səhifələrə bölmək lazım olanda faydalıdır: 21 məhsul, hər səhifədə 10 məhsul → 3 səhifə lazımdır.

FLOOR() — aşağıya yuvarlaqlaşdırma

SELECT FLOOR(4.9);  -- 4
  • Əsas ədəddən böyük olmayan tam ədəd qaytarır.

Dəyərin hansı "mərtəbədə" və ya "pillədə" olduğunu tapmaq lazım olanda istifadə olunur.

Müqayisə:

Dəyər ROUND() CEIL() FLOOR()
4.4 4 5 4
4.6 5 5 4
-4.6 -5 -4 -5

* Bölmədən qalıq: MOD()*

Qalıq nəyə lazımdır? Məsələn:

  • Ədədin cüt olub-olmadığını yoxlamaq.
  • Sətirləri şablona görə qruplara bölmək (məsələn, 3 komandaya bölmək).
  • Təkrarlanan dövr qurmaq (məsələn, "hər beşinci sətri").

Sintaksis:

MOD(dividend, divisor)

Nümunələr:

SELECT MOD(17, 5);  -- 2  (3*5 +2)
SELECT MOD(10, 3);  -- 1  (3*3 +1)

Diqqət et: qalıqın işarəsi birinci arqumentin (dividend) işarəsindən asılıdır.

İstifadə:

SELECT student_id,
       CASE WHEN MOD(student_id, 2) = 0 THEN 'Cüt' ELSE 'Tək' END AS parity
FROM students;

* Qüvvətə yüksəltmə: POWER()*

Bəzən sadəcə vurmaq yox, riyazi formulalar tətbiq etmək lazımdır:

  • Faiz hesabı: base * POWER(1 + rate, years)
  • Dairənin sahəsi: π * r^2
  • Machine learning formulalarında çəkilər

Sintaksis:

POWER(base, exponent)

Nümunələr:

SELECT POWER(2, 3);   -- 8
SELECT POWER(5, 2);   -- 25
SELECT POWER(9, 0.5); -- 3 (kvadrat kök)

Funksiya istənilən ədədlə işləyir: tam, onluq, mənfi.

Kvadrat kök: SQRT()

Əgər kök tapmaq lazımdırsa, xüsusilə statistikada (məsələn, standart sapma), SQRT() köməyə gəlir.

SELECT SQRT(25);    -- 5
SELECT SQRT(2);     -- ~1.4142

Əgər mənfi ədəd versən — səhv çıxacaq. Belə ehtimal varsa, ABS() istifadə et:

SELECT SQRT(ABS(-25));  -- 5

Praktik ssenarilər

Ssenari 1: sifarişin yekun məbləğini yuvarlaqlaşdırmaq

SELECT order_id, ROUND(total_price, 0) AS total_rounded
FROM orders;

Ssenari 2: səhifə sayını hesablamaq

SELECT CEIL(COUNT(*) / 10.0) AS pages_needed
FROM products;

Ssenari 3: tələbələri 3 qrupa bölmək

SELECT student_id,
       MOD(student_id, 3) AS group_number
FROM students;

Ssenari 4: orta kvadratın kökü

SELECT SQRT(AVG(POWER(score, 2))) AS root_mean_square
FROM grades;

Tipik səhvlər və məsləhətlər

ROUND() ikinci arqumenti qəbul edə bilir — yüzdə birə qədər yuvarlaqlaşdırmaq lazımdırsa, bunu unutma.

MOD() mənfi ədədlərlə gözlənilməz nəticələr verə bilər.

POWER() və SQRT() onluq arqumentlərlə işləyir — lazım olsa CAST() istifadə et.

SQRT()-ə mənfi ədəd düşməsin, yoxsa icra zamanı səhv çıxacaq.

2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Rəqəmlərin tam ədədə yuvarlaqlaşdırılması
Rəqəmlərin tam ədədə yuvarlaqlaşdırılması
2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Dairələrin sahəsinin hesablanması
Dairələrin sahəsinin hesablanması
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION