CodeGym /Kurslar /SQL SELF /NULLIF() funksiyası — sintaksis və istifadə nümunələri

NULLIF() funksiyası — sintaksis və istifadə nümunələri

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

Gəlin bu sirli NULL ilə işləmək üçün daha bir funksiya haqqında danışaq — NULLIF(). Bu funksiya bizə bəzi dəyərləri NULL-a çevirmək lazım olanda kömək edir ki, dataları düzgün işləyə bilək. Kəmərləri bağla, maraqlı bir səyahət olacaq!

NULLIF() funksiyası PostgreSQL-də əla bir alətdir, iki dəyəri müqayisə etməyə və əgər onlar eynidirsə NULL, yox əgər fərqlidirsə birinci dəyəri qaytarmağa imkan verir. Sanki deyir: "Əgər bu dəyərlər eynidirsə, onları unudaq!"

Funksiyanın sadə sintaksisi belədir:

NULLIF(value1, value2)

Əgər value1value2 bərabərdirsə, nəticə NULL olacaq. Əgər fərqlidirsə, nəticə value1 olacaq.

Nümunə:

SELECT NULLIF(10, 10); -- Nəticə: NULL
SELECT NULLIF(10, 20); -- Nəticə: 10
SELECT NULLIF('hello', 'hello'); -- Nəticə: NULL
SELECT NULLIF('hello', 'world'); -- Nəticə: 'hello'

Sadədir, düzdür? İndi isə bu funksiyanı real tapşırıqlarda necə istifadə edə biləcəyimizə baxaq.

Nümunə 1: Sıfıra bölmənin qarşısını almaq

Sıfıra bölmə — hər bir proqramçının kabusudur. SQL-də sıfıra bölmək cəhd etsən, səhv çıxacaq. Bax burada NULLIF() köməyə gəlir.

Təsəvvür elə ki, bizdə sales adlı cədvəl var, iki sütunla: revenue (gəlir) və expenses (xərc). Biz xərclərin rentabelliyini (revenue / expenses) hesablamaq istəyirik, amma bəzən xərclər sıfır olur. Əgər heç bir yoxlama olmadan sorğunu işlətsək, sıfıra bölmə səhvi alacağıq.

sales cədvəli:

revenue expenses
1000 200
1500 0
2000 250

Səhvli sorğu:

SELECT revenue / expenses AS profitability
FROM sales;
-- Səhv: sıfıra bölmə!

NULLIF() ilə həll:

SELECT revenue / NULLIF(expenses, 0) AS profitability
FROM sales;

Nəticə:

profitability
5.00
NULL
8.00

İndi əgər expenses sıfırdırsa, NULLIF(expenses, 0) NULL qaytarır və NULL-a bölmə səhv vermir, sadəcə NULL qaytarır.

Nümunə 2: Eyni dəyərləri NULL ilə əvəzləmək

Təsəvvür elə ki, səndə tələbələr haqqında cədvəl var, orada first_namepreferred_name sütunları var. Bəzən tələbə öz adını üstün tutur, bəzən başqa bir ad seçir. Əgər hər iki ad eynidirsə, preferred_name-i göstərməyə ehtiyac yoxdur.

students cədvəli:

first_name preferred_name
John Johnny
Anna Anna
Alex Lex

NULLIF() ilə sorğu:

SELECT first_name,
       NULLIF(preferred_name, first_name) AS display_name
FROM students;

Nəticə:

first_name display_name
John Johnny
Anna NULL
Alex Lex

Əgər preferred_namefirst_name eynidirsə, nəticə NULL olacaq.

Nümunə 3: Datada filtrasiya

Bəzən iki sütundakı dəyərlər fərqlidirsə, yalnız o sətrləri seçmək lazımdır. Məsələn, bizdə original_pricediscounted_price olan sifarişlər cədvəli var. Endirim tətbiq olunan sifarişləri tapmaq istəyirik.

orders cədvəli:

order_id original_price discounted_price
1 100 100
2 200 180
3 150 150

NULLIF() ilə sorğu:

SELECT order_id, original_price, discounted_price
FROM orders
WHERE NULLIF(original_price, discounted_price) IS NOT NULL;

Nəticə:

order_id original_price discounted_price
2 200 180

Yalnız endirimli sifarişlər nəticəyə düşdü.

NULLIF() istifadə üçün praktiki hallar

Hal 1: Opsional dəyər seçimi

Datayla işləyəndə bəzən bir neçə sütundan dəyər seçmək lazımdır, amma müəyyən dəyərləri istisna etmək istəyirik. Məsələn, bizdə işçilərin siyahısı var: base_salarybonus. Əgər bonus sıfırdırsa, onu 999 kimi götürmək istəyirik.

employees cədvəli:

employee_id base_salary bonus
1 50000 10000
2 40000 0
3 60000 5000

NULLIF() ilə sorğu:

SELECT employee_id,
       base_salary + COALESCE(NULLIF(bonus, 0), 999) AS total_salary
FROM employees;

Nəticə:

employee_id total_salary
1 60000
2 40999
3 65000

Əgər bonus sıfırdırsa, o 999 olur.

Hal 2: Sətirlərin sayılması

NULLIF() funksiyasını mürəkkəb filtrasiya şərtlərini sadələşdirmək üçün istifadə edə bilərik. Məsələn, bizdə istifadəçilər cədvəli var və bir sorğu ilə həm ümumi istifadəçi sayını, həm də qeydiyyatdan keçmiş istifadəçilərin (statusu guest olmayan) sayını tapmaq istəyirik.

SELECT
  COUNT(*) AS total_users,
  COUNT(NULLIF(status, 'guest')) AS registered_users
FROM users;

Beləliklə, cəmi bir NULLIF() funksiyası ilə bir çox problemi həll edə bilərik: səhvlərin qarşısını almaqdan tutmuş kodun oxunaqlılığını artırmağa qədər. Artıq necə işlədiyini bildiyinə görə, PostgreSQL-də datayla işləməkdə bir addım daha peşəkarsan.

1
Sorğu/viktorina
, səviyyə, dərs
Əlçatan deyil
NULL ilə işləmək
NULL ilə işləmək
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION