SQL GROUP BY — guruhlab hisoblash

Ba’zan har bir qator emas, guruh bo’yicha umumiy hisob kerak bo’ladi: “har turdan nechta mahsulot bor?” yoki “har mijoz nechta buyurtma qilgan?”. Bunday savollarga GROUP BY javob beradi — u bir xil qiymatli qatorlarni guruhlaydi va har guruhni bittaga jamlaydi.

mahsulotlar jadvalidan foydalanamiz:

idnomnarxsonituri
1Olma800050meva
2Non3000120non
3Sut1200030sut mahsuloti
4Choy1500040ichimlik
5Banan1400025meva
6Qatiq90000sut mahsuloti
7Suv4000200ichimlik
8Guruch1800060don

GROUP BY — guruhlab sanash

Har turda nechta mahsulot borligini bilaylik. GROUP BY turi bir xil turli qatorlarni birlashtiradi, COUNT(*) esa har guruhdagi qatorlarni sanaydi:

SELECT turi, COUNT(*) AS soni FROM mahsulotlar GROUP BY turi;

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

SQL · namuna baza

Natija — har tur bitta qatorga jamlandi:

turisoni
don1
ichimlik2
meva2
non1
sut mahsuloti2

Sakkiz qator beshta guruhga aylandi. COUNT(*) — har guruhda nechta qator borligi.

Guruh bo’yicha yig’indi

SUM bilan har guruhdagi qiymatlarni qo’shamiz. Har turda jami nechta dona mahsulot borligini topamiz:

SELECT turi, SUM(soni) AS jami_soni FROM mahsulotlar GROUP BY turi;

Natija:

turijami_soni
don60
ichimlik240
meva75
non120
sut mahsuloti30

Ichimlik 240 (Choy 40 + Suv 200), meva 75 (Olma 50 + Banan 25) — har guruh ichidagi soni qo’shildi.

HAVING — guruhlarni filtrlash

Guruhlangan natijani filtrlash kerak bo’lsa, WHERE emas, HAVING ishlatiladi. Faqat birdan ko’p mahsulotli turlarni olamiz:

SELECT turi, COUNT(*) AS soni FROM mahsulotlar
GROUP BY turi
HAVING COUNT(*) > 1;

Natija — faqat 2 mahsulotli turlar (don va non tushib qoldi):

turisoni
ichimlik2
meva2
sut mahsuloti2

GROUP BY va JOIN birga

GROUP BY ko’pincha JOIN bilan ishlatiladi. Har mijoz nechta buyurtma qilganini bilaylik:

SELECT m.ism, COUNT(*) AS buyurtmalar_soni
FROM buyurtmalar AS b
JOIN mijozlar AS m ON b.mijoz_id = m.id
GROUP BY m.ism;

Natija:

ismbuyurtmalar_soni
Aziz3
Bobur1
Dilnoza2

Avval jadvallar bog’landi, keyin natija mijoz ismi bo’yicha guruhlanib sanaldi.

Amaliy mashq

Guruhlab hisoblang:

  1. Har turi bo’yicha mahsulotlar sonini chiqaring;
  2. SUM(soni) bilan har toifadagi jami donani hisoblang;
  3. AVG(narx) bilan o’rtacha narxni qo’shing;
  4. natijani ORDER BY bilan songa qarab tartiblang;
  5. GROUP BY ni olib tashlang — qanday xato yoki natija chiqdi?
  6. Boshqa jadvalda sinang: mijozlar ni shahar bo’yicha guruhlab, har shahardagi mijozlar sonini chiqaring.

5-qadam GROUP BY nima uchun kerakligini ko’rsatadi.

Qisqacha xulosa

  • GROUP BY ustun — bir xil qiymatli qatorlarni bitta guruhga jamlaydi.
  • Har guruhga agregat funksiya qo’llanadi: COUNT(*) (sanaydi), SUM(ustun) (qo’shadi).
  • HAVING — guruhlarni filtrlaydi (guruhlashdan keyin); WHERE esa qatorlarni (guruhlashdan oldin).
  • GROUP BY ko’pincha JOIN bilan ishlatiladi — masalan har mijoz bo’yicha hisob.
  • Tartib: ... WHERE ... GROUP BY ... HAVING ... ORDER BY ....

Keyingi darsda agregat funksiyalar — COUNT, SUM, AVG, MIN, MAX ni batafsil ko’ramiz. Bu SQL Boshlang’ich bo’limining yakuniy darsi.

Bu dars foydali bo'ldimi?

—
— marta ko'rildi