CodeGym /Kurslar /SQL SELF /Sətirlərin sayını hesablamaq COUNT() və onu...

Sətirlərin sayını hesablamaq COUNT() və onun variantları ilə

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

COUNT() funksiyası SQL-də ən məşhur və faydalı aggregat funksiyalardan biridir. Onun əsas işi — sorğunun nəticəsində olan sətirlərin sayını hesablamaqdır. Əgər COUNT() funksiyası SQL dünyasında superqəhrəman olsaydı, onun supergücü belə suallara tez cavab tapmaq olardı:

  • Şirkətdə neçə işçi işləyir?
  • Hər fakültədə neçə tələbə oxuyur?
  • Son ayda neçə məhsul satılıb?

COUNT() funksiyasının sintaksisi çox sadədir:

COUNT(stolbets)

burada stolbets — sətirlərini saymaq istədiyin sütunun adıdır. Amma başqa istifadə variantları da var, onları dərsdə bir azdan baxacağıq.

Gəlin COUNT()-un ən basic istifadəsindən başlayaq.

Variant 1: Bütün sətirləri COUNT(*) ilə saymaq

Əgər cədvəldə hər bir sətri saymaq lazımdırsa, fərq etməz orada məlumat var ya yox, COUNT(*) istifadə olunur. Ulduz işarəsi “bütün sütunlar” deməkdir.

Nümunə: Bizdə students adlı cədvəl var və belə görünür:

id name age
1 Otto 20
2 Maria 22
3 NULL 19
4 Anna 21

Aşağıdakı sorğunu icra edirik:

SELECT COUNT(*) 
FROM students;

Nəticə:

count
4

COUNT(*) funksiyası ayrı-ayrı sütunlarda NULL dəyərlərə fikir vermir, çünki o, sadəcə cədvəldəki sətirlərin sayını sayır.

Variant 2: Sütunda mövcud olan dəyərlərin sayılması COUNT(column) ilə

Bəs əgər biz yalnız müəyyən sütunda NULL olmayan dəyərləri saymaq istəyiriksə? Onda COUNT(column) istifadə olunur.

Nümunə: adı göstərilən tələbələrin sayını hesablayaq.

SELECT COUNT(name)
FROM students;

Nəticə:

count
3

Fərqi hiss etdin? Cədvəldə 4 sətr var, amma onlardan birində name sütunu NULL dəyərini saxlayır. COUNT(column) funksiyası NULL olan sətirləri saymır.

COUNT(*)COUNT(column) müqayisəsi

Bəs bu iki variantın fərqi nədədir: COUNT(*)COUNT(column)?

  • COUNT(*) cədvəldə bütün sətirləri sayır, yəni istənilən sütunda NULL olsa belə.
  • COUNT(column) isə yalnız göstərilən sütunda NULL olmayan sətirləri sayır.

Nümunə üçün cədvəl:

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21

Sorğular:

-- Bütün sətirləri sayacaq.
SELECT COUNT(*) FROM students;         -- 4  -- TOTAL (bütün sətirlər)

-- Yalnız adı olan sətirləri sayacaq.
SELECT COUNT(name) FROM students;      -- 3  -- Adı olan sətirləri sayırıq

-- Yalnız yaşı olan sətirləri sayacaq.
SELECT COUNT(age) FROM students;        -- 3  -- Yaşı olan sətirləri sayırıq

Variant 3: Unikal dəyərlərin sayılması COUNT(DISTINCT column) ilə

Bəzən yalnız sütunda unikal dəyərləri saymaq lazımdır. Məsələn, tələbələrin neçə fərqli yaşı olduğunu bilmək istəyirik. Burada COUNT(DISTINCT column) köməyə gəlir.

Nümunə:

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(DISTINCT age) FROM students;

Nəticə:

count
3

Diqqət et, burada DISTINCT təkcə təkrarlananları yox, həm də NULL dəyərləri saymır.

Əgər DISTINCT-i COUNT(*) ilə istifadə etməyə çalışsan, error alacaqsan: DISTINCT yalnız konkret sütunlara tətbiq oluna bilər.

Real tapşırıqlarda COUNT() istifadəsinə nümunələr

Nümunə 1. Tələbələrin sayını hesablamaq

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(*) AS total_students
FROM students;

Nəticə:

total_students
4

Nümunə 2. Yaşı məlum olan tələbələrin sayını hesablamaq

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(age) AS students_with_age
FROM students;

Nəticə:

students_with_age
3

Nümunə 3. Unikal yaşların sayını hesablamaq

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 20
SELECT COUNT(DISTINCT age) AS unique_ages
FROM students;

Nəticə:

unique_ages
2

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

Düşünmək ki, COUNT(column) bütün sətirləri sayacaq, hətta NULL olsa belə.

Bu, düz deyil: COUNT(column) göstərilən sütunda NULL olan sətirləri saymır.

COUNT(*) istifadə edib unikal dəyərləri saymaq istəmək.

Bunun əvəzinə COUNT(DISTINCT column) istifadə et.

Filtrlə hesablama zamanı konkret məlumatları saymağı unutmaq.

Məsələn:

SELECT COUNT(*) FROM students WHERE age > 20;

Burada sən yalnız yaşı 20-dən böyük olan tələbələri alacaqsan, çünki WHERE artıq sətirləri saymadan əvvəl filtr edir.

Bu nüanslar tez-tez sorğularda məntiqi səhvlərə səbəb olur. Diqqətli ol!

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