CodeGym /Kurslar /SQL SELF /COALESCE() ilə NULL-ların hesablamalarda işlənməsi

COALESCE() ilə NULL-ların hesablamalarda işlənməsi

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

Bu gün biz yenə NULL ilə işləməyə bir az daha dərindən baxacağıq və çox faydalı bir funksiya ilə tanış olacağıq — COALESCE(). Bu funksiya sənin datandakı NULL dəyərlərlə rahat şəkildə baş etməyə imkan verir.

Gəlin belə bir nümunəyə baxaq: səndə işçilər haqqında bir cədvəl var, amma bəzi işçilərin maaş məlumatı yoxdur. Bəs biz bütün maaşları artırmaq istəsək nə baş verəcək? Heç nə yaxşı deyil. Çünki NULL ilə əməliyyat aparmaq olmur. Bəs biz NULL maaşları, məsələn, 0 ilə əvəz etmək istəsək? Bax burada səhnəyə COALESCE() çıxır.

COALESCE() — bu funksiya verilən arqumentlər siyahısından ilk NULL olmayan dəyəri qaytarır. Əgər siyahıdakı bütün dəyərlər NULL olsa, funksiya NULL qaytarır. Sadə dillə desək, o deyir: "Mənə ilk normal dəyəri ver, zəhmət olmasa!"

Sintaksis

COALESCE(value1, value2, ..., value_n)

value1, value2, ..., value_n — bunlar funksiyaya verdiyin arqumentlərdir. O, ilk NULL olmayan dəyəri qaytaracaq.

COALESCE() ilə işləməyə nümunələr

Gəlin bir neçə nümunəyə baxaq.

Nümunə 1: NULL-u 0 ilə əvəz edirik

Tutaq ki, bizdə salaries adlı bir cədvəl var:

id name salary
1 Otto 50000
2 Maria NULL
3 Alex 60000
4 Anna NULL

Biz ümumi maaş məbləğini hesablamaq istəyirik - bunu etmək asandır:

SELECT SUM(salary) AS total_salary
FROM salaries;

SUM() funksiyası NULL-ları saymır, yəni problem yoxdur.

Amma sonra biz istəyirik ki, hər işçiyə 1000 bonus verək və ümumi maaşı hesablayaq.

SELECT SUM(salary+1000) AS total_salary
FROM salaries;

Və nəticə bir az qarışır. Ən yaxşısı, elə əvvəldən NULL dəyərlərdən qurtulmaq və onları COALESCE funksiyası ilə 0-a çevirməkdir. Gəlin baxaq necə olur:

SELECT SUM(COALESCE(salary, 0)) AS total_salary
FROM salaries;

Nəticə:

total_salary
110000

Belə daha yaxşı və etibarlıdır.

Nümunə 2: NULL-u default dəyərlə əvəz edirik

Tutaq ki, bizdə students adlı cədvəl var, adlar və ünvanlar saxlanılır:

id name address
1 Anna Kanne
2 Peter NULL
3 Lisa Painful
4 Alex NULL

Biz ünvanlardakı NULL-u "Göstərilməyib" ilə əvəz etmək istəyirik:

SELECT name, COALESCE(address, 'Göstərilməyib') AS resolved_address
FROM students;

Sorgunun nəticəsi:

name resolved_address
Anna Kanne
Peter Göstərilməyib
Lisa Painful
Alex Göstərilməyib

Nümunə 3: Bir neçə dəyərdən istifadə

Bəzən NULL-u bir yox, bir neçə dəyərlə əvəz etmək lazım olur. Məsələn, biz istəyirik ki, ad, dostlar üçün ad və ya heç biri yoxdursa "Adsız" istifadə edək. users cədvəli:

user_id first_name short_name full_name
1 John Jonny Johnny Walker
2 NULL Pete Peter Kamen
3 NULL NULL

Sorgu:

SELECT user_id,
       COALESCE(first_name, short_name, 'Adsız') AS display_name
FROM users;

Nəticə:

user_id display_name
1 John
2 Pete
3 Adsız

COALESCE()-in praktik istifadəsi

Realda COALESCE() — natamam datalarla işləmək üçün əsl xilasedicidir.

Gəlin baxaq, o müxtəlif tapşırıqlarda necə kömək edir.

Nümunə 1: Mətn sahələrində dəyərlərin əvəzlənməsi

Əsas cədvəl customers:

id name address
1 Alex Lin 123 Maple St
2 Maria Chi NULL
3 Anna Song 456 Oak Ave
4 Otto Art NULL
5 Liam Park 789 Pine Rd

Sorgu:

SELECT name, COALESCE(address, 'Göstərilməyib') AS address
FROM customers;

Nəticə:

name address
Alex Lin 123 Maple St
Maria Chi Göstərilməyib
Anna Song 456 Oak Ave
Otto Art Göstərilməyib
Liam Park 789 Pine Rd

Nümunə 2: Hesabatlar üçün datanın hazırlanması

Əsas cədvəl sales:

id product price
1 Widget A 100
2 Widget B NULL
3 Widget C 250
4 Widget D NULL
5 Widget E 300

Sorgu:

SELECT SUM(COALESCE(price, 0)) AS total_sales
FROM sales;

Nəticə:

total_sales
650

COALESCE() istifadə edərkən tipik səhvlər

Baxmayaraq ki, COALESCE() sadə və universal funksiya kimi görünür, onunla işləyərkən bəzi tələlər ola bilər.

Data tiplərinin uyğun olmaması. COALESCE()-ə verdiyin bütün arqumentlər data tipi baxımından uyğun olmalıdır. Məsələn, string və rəqəm dəyərləri qarışdırmaq olmaz.

-- Səhv
SELECT COALESCE(salary, 'Göstərilməyib') FROM employees; 
-- salary — rəqəm sahəsidir, 'Göstərilməyib' isə mətn.

Arqumentlərin sırasını nəzərə almamaq. COALESCE() ilk NULL olmayan dəyəri qaytarır, yəni arqumentlərin sırası vacibdir.

2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
NULL dəyərlərinin defolt dəyərlə əvəzlənməsi
NULL dəyərlərinin defolt dəyərlə əvəzlənməsi
2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
NULL dəyərlərin bir neçə prioritet səviyyəsi ilə əvəzlənməsi
NULL dəyərlərin bir neçə prioritet səviyyəsi ilə əvəzlənməsi
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION