# SQL agregat funksiyalar: COUNT, SUM, AVG

> SQL agregat funksiyalari: COUNT bilan sanash, SUM bilan yig'ish, AVG bilan o'rtacha, MIN va MAX bilan eng kichik va katta qiymatni topish hamda NULL ta'siri.

Manba: https://learncode.uz/sql/agregat-funksiyalar/
Sana: 2026-06-15

[GROUP BY darsida](https://learncode.uz/sql/group-by) `COUNT` va `SUM` bilan tanishdik. Bu
darsda barcha asosiy **agregat funksiyalar**ni ko'ramiz — ular ko'p
qatordan bitta umumiy natija chiqaradi: jami, o'rtacha, eng katta. Bu SQL
Boshlang'ich bo'limining yakuniy darsi.

`mahsulotlar` jadvali:

| id | nom | narx | soni | turi |
|---|---|---|---|---|
| 1 | Olma | 8000 | 50 | meva |
| 2 | Non | 3000 | 120 | non |
| 3 | Sut | 12000 | 30 | sut mahsuloti |
| 4 | Choy | 15000 | 40 | ichimlik |
| 5 | Banan | 14000 | 25 | meva |
| 6 | Qatiq | 9000 | 0 | sut mahsuloti |
| 7 | Suv | 4000 | 200 | ichimlik |
| 8 | Guruch | 18000 | 60 | don |

## COUNT — sanash

`COUNT(*)` jadvaldagi qatorlar sonini beradi:

```sql
SELECT COUNT(*) AS jami FROM mahsulotlar;
```

O'zingiz ishga tushirib ko'ring — so'rovni tahrirlashingiz ham mumkin:

```sql
SELECT
  COUNT(*)  AS mahsulotlar,
  SUM(soni) AS jami_dona,
  AVG(narx) AS ortacha_narx,
  MIN(narx) AS eng_arzon,
  MAX(narx) AS eng_qimmat
FROM mahsulotlar;
```

Natija — `8` (jami sakkiz mahsulot). `GROUP BY` bo'lmagani uchun butun
jadval bitta guruh sifatida sanaldi.

`COUNT(ustun)` esa faqat **bo'sh bo'lmagan** (`NULL` emas) qiymatlarni
sanaydi. Buni `mijozlar` da ko'ramiz (Malikaning yoshi `NULL`):

```sql
SELECT COUNT(*) AS jami, COUNT(yosh) AS yoshi_bor FROM mijozlar;
```

Natija: `jami` = 4, `yoshi_bor` = 3. `COUNT(*)` hammani, `COUNT(yosh)` esa
yoshi kiritilganlarni sanadi — [NULL](https://learncode.uz/sql/null-va-distinct) tashlab
yuborildi.

## SUM va AVG — yig'indi va o'rtacha

`SUM` ustundagi sonlarni qo'shadi, `AVG` o'rtachasini beradi:

```sql
SELECT SUM(narx) AS jami_narx, AVG(narx) AS ortacha_narx FROM mahsulotlar;
```

Natija:

| jami_narx | ortacha_narx |
|---|---|
| 83000 | 10375 |

Barcha narxlar yig'indisi 83000, o'rtachasi 10375 (83000 ÷ 8).

## MIN va MAX — eng kichik va katta

`MIN` eng kichik, `MAX` eng katta qiymatni topadi:

```sql
SELECT MIN(narx) AS eng_arzon, MAX(narx) AS eng_qimmat FROM mahsulotlar;
```

Natija: `eng_arzon` = 3000 (Non), `eng_qimmat` = 18000 (Guruch). `MIN` va
`MAX` matnda ham ishlaydi: `MIN(nom)` alifboda birinchisini (Banan),
`MAX(nom)` oxirgisini (Suv) beradi.

> **Boshlovchilar tez-tez yanglishadigan joy**
>
> `SUM`, `AVG`, `MIN`, `MAX` `NULL` qiymatlarni **hisobga olmaydi** — ular
> tashlab yuboriladi. Masalan `AVG(yosh)` uch mijoz bo'yicha hisoblanadi
> (Malika `NULL` chiqmaydi): (28+34+22) ÷ 3 = 28, ÷ 4 emas. Bu ba'zan
> kutilmagan natija berishi mumkin, shuning uchun `NULL` bor ustunlarda
> ehtiyot bo'ling.

## Bir so'rovda bir nechta funksiya

Agregatlarni birga ishlatish mumkin — umumiy hisobot bir so'rovda:

```sql
SELECT
  COUNT(*)   AS mahsulotlar,
  SUM(soni)  AS jami_dona,
  AVG(narx)  AS ortacha_narx,
  MAX(narx)  AS eng_qimmat
FROM mahsulotlar;
```

Natija — butun ombor haqida qisqa xulosa:

| mahsulotlar | jami_dona | ortacha_narx | eng_qimmat |
|---|---|---|---|
| 8 | 525 | 10375 | 18000 |

## GROUP BY bilan — guruh bo'yicha

Agregatlar butun jadval o'rniga [`GROUP BY`](https://learncode.uz/sql/group-by) bilan **har
guruh** uchun hisoblanadi. Har turdagi o'rtacha narx:

```sql
SELECT turi, AVG(narx) AS ortacha FROM mahsulotlar GROUP BY turi;
```

Bu har tur uchun alohida o'rtacha beradi — meva, ichimlik va hokazo.

<Callout type="example" title="O'zingizni sinab ko'ring">
Namuna bazangizda sinang:

```sql
SELECT MIN(narx), MAX(narx), AVG(narx) FROM mahsulotlar WHERE turi = 'meva';
SELECT SUM(soni) AS jami FROM buyurtmalar;
```

Birinchisi faqat mevalar bo'yicha hisoblaydi (`WHERE` avval filtrladi).
Ikkinchisi barcha buyurtmalardagi jami dona sonini beradi. `WHERE` va
agregat birga ishlashiga e'tibor bering.
</Callout>

## Amaliy mashq

Agregat funksiyalarni sinang:

1. `COUNT(*)` bilan jami mahsulotlar sonini oling;
2. `SUM`, `AVG`, `MIN`, `MAX` ni bitta so'rovda birlashtiring;
3. `mijozlar` da `COUNT(*)` va `COUNT(yosh)` ni solishtiring;
4. `WHERE turi = 'meva'` qo'shib, faqat mevalar bo'yicha hisoblang;
5. `AVG(narx)` natijasini `ROUND(AVG(narx), 0)` bilan yaxlitlang;
6. Ikki agregatni bitta ifodada birlashtiring: `MAX(narx) - MIN(narx)` —
   eng qimmat va eng arzon mahsulot orasidagi farqni toping.

3-qadamdagi ikki son nega farq qiladi?

## Qisqacha xulosa

- Agregat funksiyalar ko'p qatordan **bitta** natija chiqaradi.
- `COUNT(*)` — barcha qatorlar; `COUNT(ustun)` — `NULL` bo'lmaganlar.
- `SUM` — yig'indi, `AVG` — o'rtacha, `MIN`/`MAX` — eng kichik/katta.
- `SUM`, `AVG`, `MIN`, `MAX` `NULL` ni hisobga olmaydi.
- `GROUP BY` bilan har guruh, `WHERE` bilan filtrlangan qatorlar bo'yicha
  hisoblanadi.

Tabriklaymiz — **SQL Boshlang'ich** bo'limini yakunladingiz! Endi
ma'lumotlar bazasidan ma'lumot ola, qo'sha, o'zgartira va guruhlab hisoblay
olasiz.

Keyingi darsda [`JOIN` turlari](https://learncode.uz/sql/join-turlari) — `LEFT` va `RIGHT`
bilan mos kelmagan qatorlarni ham ko'rsatishni o'rganamiz. Shu yerdan
**O'rta daraja** boshlanadi: ichki so'rovlar, `CREATE TABLE` va indekslar
bilan chuqurroq ishlaymiz.
