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(*) və COUNT(column) müqayisəsi
Bəs bu iki variantın fərqi nədədir: COUNT(*) və COUNT(column)?
COUNT(*)cədvəldə bütün sətirləri sayır, yəni istənilən sütundaNULLolsa 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!
GO TO FULL VERSION