GROUP BY va HAVING orqali guruhlash — qatorlarni umumiy xususiyat bo’yicha guruhlab, har bir guruh uchun statistika hisoblaydigan vosita. “Har bir shahardagi foydalanuvchilar soni” yoki “har bir mahsulot bo’yicha umumiy sotuv” kabi savollarga aynan GROUP BY javob beradi. U aggregat funksiyalar bilan birga ishlaydi.
GROUP BY — qatorlarni ustun qiymati bo’yicha guruhlaydigan buyruq. HAVING — guruhlangan natijaga shart qo’yadi (WHERE guruhlashdan oldin, HAVING keyin ishlaydi).
Boshlang’ich jadval
Quyidagi foydalanuvchilar jadvali bilan ishlaymiz:
| id | ism | shahar | balans |
|---|---|---|---|
| 1 | Farrux | Toshkent | 500000 |
| 2 | Master Sherkulov | Toshkent | 800000 |
| 3 | Aziz | Samarqand | 300000 |
| 4 | Dilnoza | Samarqand | 600000 |
| 5 | Jasur | Buxoro | 400000 |
GROUP BY — guruhlash va sanash
GROUP BY qatorlarni ustun bo’yicha guruhlaydi. COUNT bilan har bir guruhdagi qatorlar sonini sanaymiz:
SELECT shahar, COUNT(*) AS soni
FROM foydalanuvchilar
GROUP BY shahar;
Natija:
| shahar | soni |
|---|---|
| Toshkent | 2 |
| Samarqand | 2 |
| Buxoro | 1 |
GROUP BY shahar — bir xil shahardagi qatorlarni bir guruhga jamladi, COUNT(*) esa har guruhdagi foydalanuvchilar sonini sanadi. Bu — statistikaning eng ko’p ishlatiladigan naqshi.
Guruh bo’yicha aggregat
GROUP BY boshqa aggregat funksiyalar bilan ham ishlaydi. Har bir shahardagi umumiy va o’rtacha balansni hisoblaymiz:
SELECT shahar,
SUM(balans) AS umumiy,
AVG(balans) AS ortacha
FROM foydalanuvchilar
GROUP BY shahar;
Natija:
| shahar | umumiy | ortacha |
|---|---|---|
| Toshkent | 1300000 | 650000 |
| Samarqand | 900000 | 450000 |
| Buxoro | 400000 | 400000 |
Har bir shahar uchun umumiy (SUM) va o’rtacha (AVG) balans alohida hisoblandi. Bu moliyaviy hisobotlarda doimo ishlatiladi.
HAVING — guruhga shart
HAVING guruhlangan natijaga shart qo’yadi. WHERE dan farqi: WHERE alohida qatorlarni, HAVING esa guruhlarni filtrlaydi. Masalan, faqat 1 dan ortiq foydalanuvchisi bor shaharlar:
SELECT shahar, COUNT(*) AS soni
FROM foydalanuvchilar
GROUP BY shahar
HAVING COUNT(*) > 1;
Natija:
| shahar | soni |
|---|---|
| Toshkent | 2 |
| Samarqand | 2 |
HAVING COUNT(*) > 1 — faqat bir nechta foydalanuvchisi bor guruhlarni qoldirdi. Buxoro (1 ta) chiqarib tashlandi. HAVING ni aggregat natijaga shart qo’yishda ishlating.
WHERE va HAVING farqi
Ikki shart operatorining farqini jadvalda ko’ramiz:
| Operator | Qachon ishlaydi | Nimaga shart |
|---|---|---|
WHERE |
guruhlashdan oldin | alohida qatorlar |
HAVING |
guruhlashdan keyin | guruhlar (aggregat) |
Xulosa
Bu bo’limda GROUP BY bilan guruhlashni, aggregat funksiyalar bilan birga ishlatishni, HAVING bilan guruhga shart qo’yishni va WHERE/HAVING farqini ko’rib chiqdik. Guruhlash — statistik hisobotlarning asosidir. Keyingi darsda murakkab SELECT va INSERT ifodalariga o’tamiz.