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ırmaCEIL()— yuxarıya yuvarlaqlaşdırmaFLOOR()— aşağıya yuvarlaqlaşdırmaMOD()— bölmədən qalıqPOWER()— 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.
GO TO FULL VERSION