Ko'p satrdan bitta hisobot: agregat funksiyalar va guruhlash
10-sinfBI & ML4-hafta · 10-darshududlar, maktablar, yillik_kpi jadvallari
Satrlarni shart bilan saralash
TOP-N tahlili va sahifalash
Bugun: bitta satr emas, butun guruh haqida hisobot.
Ko'p satr, bitta natija
Nechta?
Yig'indi
O'rtacha
Eng kam / eng ko'p
Hammasi NULL larni o'tkazib yuboradi. Faqat COUNT(*) hamma satrni sanaydi.
SELECT COUNT(*) AS yozuvlar,
SUM(oquvchilar_soni) AS jami,
ROUND(AVG(oquvchilar_soni), 0) AS ortacha,
MAX(oquvchilar_soni) AS eng_kop
FROM yillik_kpi;
Barcha satrlarni sanaydi, NULL bo'lsa ham.
Faqat shu ustunda NULL bo'lmagan qiymatlarni sanaydi.
Ustunda 10 satr, 3 tasi NULL. COUNT(ustun) nechta chiqaradi?
Guruhlab hisoblash
SELECT SUM(oquvchilar_soni)
FROM yillik_kpi;
Natija: bitta son.
SELECT yil, SUM(oquvchilar_soni) AS jami
FROM yillik_kpi
GROUP BY yil
ORDER BY yil;
Natija: har yil uchun bitta qator.
Chuqurroq bilish uchun pastga bosing.
SELECT hudud_id, yil, COUNT(*)
FROM yillik_kpi
GROUP BY hudud_id, yil;
Guruh = ustunlar kombinatsiyasi. Shu juftlik takrorlansa, COUNT 1 dan katta bo'ladi.
SELECT yil,
ROUND(SUM(oquvchilar_soni) * 1.0
/ NULLIF(SUM(oqituvchilar_soni), 0), 2) AS nisbat
FROM yillik_kpi
GROUP BY yil
ORDER BY yil;
NULLIF(x, 0): x nol bo'lsa NULL, nolga bo'lish xatosi yo'q
* 1.0: SQLite da kasr natija olish uchun
FROM jadvalidan hamma satr olinadi.
Bir xil yil qiymatlari bitta savatga tushadi.
SUM/COUNT har savat uchun alohida ishlaydi.
Har guruh bitta qator bo'lib chiqadi.
Guruhlarni filtrlash
Satrlarni filtrlaydi
Guruhlashdan oldin
Agregat yozib bo'lmaydi
Guruhlarni filtrlaydi
Guruhlashdan keyin
Agregat yozish mumkin
Sxema: chegaradan o'tmagan guruhlar (kulrang) natijadan tushib qoladi. Ustun balandliklari shartli.
Qutilarni bosing. Yozish tartibi bor, bajarilish tartibi boshqa!
SELECT hudud_id, COUNT(*) AS maktab_soni, SUM(sigim) AS umumiy_sigim
FROM maktablar
WHERE sigim >= 600
GROUP BY hudud_id
HAVING COUNT(*) >= 2
ORDER BY umumiy_sigim DESC;
SELECT yil, SUM(oquvchilar_soni)
FROM yillik_kpi
WHERE SUM(oquvchilar_soni) > 2500000
GROUP BY yil;
WHERE da agregat: guruhlar hali yo'q!
SELECT yil, SUM(oquvchilar_soni)
FROM yillik_kpi
GROUP BY yil
HAVING SUM(oquvchilar_soni) > 2500000;
Agregat shart HAVING da. Natija: 2024.
SELECT hudud_id, yil, COUNT(*) AS soni
FROM yillik_kpi
GROUP BY hudud_id, yil
HAVING COUNT(*) > 1;
Agregat shart faqat HAVING da.
SELECT dagi oddiy ustun GROUP BY da bo'lishi shart.
SQLite da butun bo'linma. * 1.0 qo'shing.
"Jami o'quvchisi 2 500 000 dan ko'p yillar" sharti qayerga yoziladi?
Yillar va hududlar bo'yicha hisobot, KPI nisbati va dublikat tekshirish (Python skript).
Keyingi dars: JOIN. Jadvallarni bog'laymiz!