Darsliklar SQL GROUP BY va HAVING orqali guruhlash

SQL SQL GROUP BY va HAVING orqali guruhlash

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 BYqatorlarni 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.