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:

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

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:

turi soni
don 1
ichimlik 2
meva 2
non 1
sut mahsuloti 2

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:

turi jami_soni
don 60
ichimlik 240
meva 75
non 120
sut mahsuloti 30

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):

turi soni
ichimlik 2
meva 2
sut mahsuloti 2

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:

ism buyurtmalar_soni
Aziz 3
Bobur 1
Dilnoza 2

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?

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 funksiyalarCOUNT, SUM, AVG, MIN, MAX ni batafsil ko’ramiz. Bu SQL Boshlang’ich bo’limining yakuniy darsi.

Bu dars foydali bo'ldimi?

marta ko'rildi