products jadvalida 5 qator, colors jadvalida 4 qator bor. Β«SELECT * FROM products CROSS JOIN colorsΒ» nechta qator qaytaradi?
Anonymous Quiz
43%
9
43%
20
14%
5
πͺ Self-join: jadvalni o'ziga qo'shish
Ba'zan kerakli ma'lumot bitta jadval ichida bo'ladi. Masalan, xodim va uning rahbari bir jadvalda:
Rahbarning ismini chiqarish uchun jadvalni o'ziga qo'shamiz:
Bu yerda
Klassik intervyu savoli: rahbaridan ko'p maosh oladigan xodimlar.
π‘ LEFT yoki INNER? Rahbari yo'q xodim (direktor) ham ro'yxatda kerak bo'lsa β
π Self-join yana qayerda: takrorlangan yozuvlarni juftlab topish, ketma-ket qatorlarni solishtirish (window bo'lmagan bazalarda), bir guruhdagi elementlar juftligi.
π― Endi amaliyot: Rahbaridan ko'p maosh oladigan xodimlar
Klassik intervyu masalasi β o'zingiz yozib ko'ring π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
Ba'zan kerakli ma'lumot bitta jadval ichida bo'ladi. Masalan, xodim va uning rahbari bir jadvalda:
employees(id, name, salary, manager_id)Rahbarning ismini chiqarish uchun jadvalni o'ziga qo'shamiz:
SELECT e.name AS xodim,
m.name AS rahbar
FROM employees e
LEFT JOIN employees m ON m.id = e.manager_id;
Bu yerda
e va m β bir jadvalning ikki Β«nusxasiΒ». Alias'siz bunday so'rov yozib bo'lmaydi, chunki baza qaysi name haqida gapirayotganingizni tushunmaydi.Klassik intervyu savoli: rahbaridan ko'p maosh oladigan xodimlar.
SELECT e.name, e.salary, m.salary AS rahbar_maoshi
FROM employees e
JOIN employees m ON m.id = e.manager_id
WHERE e.salary > m.salary;
π‘ LEFT yoki INNER? Rahbari yo'q xodim (direktor) ham ro'yxatda kerak bo'lsa β
LEFT JOIN. Yuqoridagi taqqoslashda esa INNER to'g'ri: rahbari yo'q odamni solishtirib bo'lmaydi.π Self-join yana qayerda: takrorlangan yozuvlarni juftlab topish, ketma-ket qatorlarni solishtirish (window bo'lmagan bazalarda), bir guruhdagi elementlar juftligi.
π― Endi amaliyot: Rahbaridan ko'p maosh oladigan xodimlar
Klassik intervyu masalasi β o'zingiz yozib ko'ring π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
π1
β
Javob: 20 qator
Lekin CROSS JOIN ataylab ham kerak bo'ladi.
Vazifa: har bir filialning har bir kun bo'yicha savdosini chiqaring β savdo bo'lmagan kunlar ham 0 bilan ko'rinsin.
Oddiy
π Naqsh: CROSS JOIN bilan Β«bo'lishi kerakΒ» ni yasang, LEFT JOIN bilan Β«borΒ» ni ustiga qo'ying. Grafiklar va hisobotlarda bo'shliq qolmaydi.
π― Endi amaliyot: Kalendar generatsiyasi
Xuddi shu naqsh β kalendar yasash π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
CROSS JOIN shartsiz ishlaydi: 5 Γ 4 = 20. Shart yozmasdan oddiy vergul bilan FROM a, b deb yozsangiz ham xuddi shu natija chiqadi β bu Β«tasodifiy CROSS JOINΒ», eng qimmat xatolardan biri. Million qatorli ikki jadvalni shunday qo'shsangiz, server qotadi.Lekin CROSS JOIN ataylab ham kerak bo'ladi.
Vazifa: har bir filialning har bir kun bo'yicha savdosini chiqaring β savdo bo'lmagan kunlar ham 0 bilan ko'rinsin.
Oddiy
GROUP BY bunday qila olmaydi: bazada yozuv yo'q bo'lsa, natijada ham qator bo'lmaydi. Yechim β avval to'liq matritsa yasash:SELECT b.name, d.day, COALESCE(SUM(s.amount), 0) AS jami
FROM branches b
CROSS JOIN generate_series(
'2026-10-01'::date, '2026-10-31'::date, '1 day'
) AS d(day)
LEFT JOIN sales s
ON s.branch_id = b.id
AND s.sale_date = d.day
GROUP BY b.name, d.day
ORDER BY b.name, d.day;
π Naqsh: CROSS JOIN bilan Β«bo'lishi kerakΒ» ni yasang, LEFT JOIN bilan Β«borΒ» ni ustiga qo'ying. Grafiklar va hisobotlarda bo'shliq qolmaydi.
π― Endi amaliyot: Kalendar generatsiyasi
Xuddi shu naqsh β kalendar yasash π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
β Ertalabki masala: konversiya foizi
Jadval:
Vazifa: har bir manba bo'yicha tashriflar soni va konversiya foizini chiqaring.
Kutilgan natija:
β οΈ Ikkita tuzoq bor: butun sonlar bo'linishi va nolga bo'lish. Ikkalasi ham jimgina noto'g'ri natija beradi.
βοΈ Qanday yozgan bo'lardingiz? Izohda yozing β 13:00 da tahlil qilamiz π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
Jadval:
visits(id, source, converted) β source trafik manbasi, converted qiymati true yoki false.Vazifa: har bir manba bo'yicha tashriflar soni va konversiya foizini chiqaring.
Kutilgan natija:
source tashrif konversiya_%
telegram 1200 4.5
instagram 800 2.1
β οΈ Ikkita tuzoq bor: butun sonlar bo'linishi va nolga bo'lish. Ikkalasi ham jimgina noto'g'ri natija beradi.
βοΈ Qanday yozgan bo'lardingiz? Izohda yozing β 13:00 da tahlil qilamiz π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
π Foiz va nisbatni to'g'ri hisoblash
Ertalabki masalaning yechimi:
Uchta detal butun natijani hal qiladi:
1οΈβ£
2οΈβ£
3οΈβ£
β οΈ Yana bir tuzoq:
π Shu qolip bilan istalgan ko'rsatkich hisoblanadi: qaytarilgan buyurtmalar ulushi, faol foydalanuvchilar foizi, xato tranzaksiyalar nisbati.
π― Endi amaliyot: Manba bo'yicha konversiya
Aynan shu masala saytda bor β yozib tekshiring π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
Ertalabki masalaning yechimi:
SELECT
source,
COUNT(*) AS tashrif,
ROUND(100.0 * COUNT(*) FILTER (WHERE converted)
/ NULLIF(COUNT(*), 0), 1) AS konversiya
FROM visits
GROUP BY source
ORDER BY konversiya DESC;
Uchta detal butun natijani hal qiladi:
1οΈβ£
100.0 β nuqta bilan. 100 * 5 / 200 butun sonlar bo'linishida 0 beradi, 100.0 esa 2.5. Bu eng ko'p uchraydigan Β«nega hamma yerda nol?Β» sababi.2οΈβ£
NULLIF(x, 0) β nolga bo'lishdan himoya. Bo'luvchi 0 bo'lsa, so'rov xato bermay NULL qaytaradi.3οΈβ£
FILTER (WHERE ...) β PostgreSQL usuli. Boshqa bazalarda CASE bilan:SUM(CASE WHEN converted THEN 1 ELSE 0 END)
β οΈ Yana bir tuzoq:
COUNT(converted) yozsangiz β false qiymatlar ham sanaladi, chunki ular NULL emas. Shart bo'yicha sanash uchun doim FILTER yoki CASE.π Shu qolip bilan istalgan ko'rsatkich hisoblanadi: qaytarilgan buyurtmalar ulushi, faol foydalanuvchilar foizi, xato tranzaksiyalar nisbati.
π― Endi amaliyot: Manba bo'yicha konversiya
Aynan shu masala saytda bor β yozib tekshiring π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
π― O'rtacha foiz β o'rtachalarning o'rtachasi emas
Bugungi mavzuning davomi. Mana klassik xato:
Uch manba: konversiyasi 10%, 20% va 30%.
Umumiy konversiya qancha? Β«(10+20+30)/3 = 20%Β» β noto'g'ri.
Agar birinchi manbadan 10 000 tashrif, qolganidan 100 tadan bo'lsa, umumiy konversiya 10% ga juda yaqin bo'ladi. Foizlarning o'rtachasini olish β og'irlikni e'tiborsiz qoldirish demakdir.
β To'g'ri yo'l β avval yig'ing, keyin bo'ling:
β Noto'g'ri:
π Qoida: nisbatlarni o'rtachalamang β sanoqchi va maxrajni alohida yig'ing.
Xuddi shu xato bu yerlarda ham uchraydi: o'rtacha chek, konversiya, xatolik foizi, CTR. Hisobotingizdagi raqam dashboarddagi raqamga to'g'ri kelmayotgan bo'lsa β birinchi navbatda shuni tekshiring.
π¬ Sizda shunday holat bo'lganmi?
π― Endi amaliyot: Mijozlarni balans bo'yicha 4 guruhga bo'lish
Segmentatsiya mashqi β NTILE bilan π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
Bugungi mavzuning davomi. Mana klassik xato:
Uch manba: konversiyasi 10%, 20% va 30%.
Umumiy konversiya qancha? Β«(10+20+30)/3 = 20%Β» β noto'g'ri.
Agar birinchi manbadan 10 000 tashrif, qolganidan 100 tadan bo'lsa, umumiy konversiya 10% ga juda yaqin bo'ladi. Foizlarning o'rtachasini olish β og'irlikni e'tiborsiz qoldirish demakdir.
β To'g'ri yo'l β avval yig'ing, keyin bo'ling:
SELECT ROUND(100.0 * SUM(converted::int) / COUNT(*), 2)
FROM visits;
β Noto'g'ri:
SELECT AVG(konversiya) FROM (...) t;
π Qoida: nisbatlarni o'rtachalamang β sanoqchi va maxrajni alohida yig'ing.
Xuddi shu xato bu yerlarda ham uchraydi: o'rtacha chek, konversiya, xatolik foizi, CTR. Hisobotingizdagi raqam dashboarddagi raqamga to'g'ri kelmayotgan bo'lsa β birinchi navbatda shuni tekshiring.
π¬ Sizda shunday holat bo'lganmi?
π― Endi amaliyot: Mijozlarni balans bo'yicha 4 guruhga bo'lish
Segmentatsiya mashqi β NTILE bilan π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
UNION va UNION ALL: qaysi biri odatda tezroq ishlaydi va nima uchun?
Anonymous Quiz
0%
UNION β kamroq qator qaytaradi
71%
UNION ALL β dublikatlarni tekshirmaydi
29%
Ikkalasi bir xil tezlikda
β To'plamlar: UNION, INTERSECT, EXCEPT
JOIN qatorlarni yonma-yon qo'shadi, to'plam amallari esa ustma-ust.
UNION ALL β ikkala natijani birlashtiradi, hammasini qoldiradi.
UNION β birlashtiradi va dublikatlarni olib tashlaydi (shuning uchun sekinroq).
INTERSECT β faqat ikkalasida ham bor qatorlar.
EXCEPT β birinchisida bor, ikkinchisida yo'q (MySQL da yo'q β
Uchta qoida:
1οΈβ£ Ustunlar soni va tartibi mos bo'lishi shart, nomlari esa birinchi so'rovdan olinadi.
2οΈβ£
3οΈβ£ Dublikat bo'lmasligini bilsangiz β doim
π‘
π― Endi amaliyot: UNION va UNION ALL farqi
Farqni amalda ko'ring π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
JOIN qatorlarni yonma-yon qo'shadi, to'plam amallari esa ustma-ust.
UNION ALL β ikkala natijani birlashtiradi, hammasini qoldiradi.
UNION β birlashtiradi va dublikatlarni olib tashlaydi (shuning uchun sekinroq).
INTERSECT β faqat ikkalasida ham bor qatorlar.
EXCEPT β birinchisida bor, ikkinchisida yo'q (MySQL da yo'q β
NOT EXISTS bilan yoziladi).-- Ikki oyda ham xarid qilganlar
SELECT customer_id FROM orders WHERE month = 9
INTERSECT
SELECT customer_id FROM orders WHERE month = 10;
-- Sentabrda bor, oktabrda yo'q (ketib qolganlar)
SELECT customer_id FROM orders WHERE month = 9
EXCEPT
SELECT customer_id FROM orders WHERE month = 10;
Uchta qoida:
1οΈβ£ Ustunlar soni va tartibi mos bo'lishi shart, nomlari esa birinchi so'rovdan olinadi.
2οΈβ£
ORDER BY faqat oxirida, butun natijaga qo'llanadi.3οΈβ£ Dublikat bo'lmasligini bilsangiz β doim
UNION ALL. Bu tekin tezlik.π‘
EXCEPT ma'lumotlarni solishtirishda juda qulay: eski va yangi jadvalni ikki tomonlama ayirsangiz, qaysi qatorlar o'zgarganini darrov ko'rasiz.π― Endi amaliyot: UNION va UNION ALL farqi
Farqni amalda ko'ring π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
β
Javob: UNION ALL tezroq
π Amaliy qoida: dublikat bo'lishi mumkin emasligini bilsangiz (masalan, ikki jadvalda turli davrlar yoki turli manbalar), doim
Yana bir foydali naqsh β bir nechta ko'rsatkichni bitta jadvalda chiqarish:
Natija β kichik dashboard, bitta so'rovda. Hisobot yozganda juda qo'l keladi.
β οΈ Ustunlar tipi mos kelishi kerak: matn ustuniga son qo'shsangiz, baza xato beradi yoki jimgina tipni o'zgartiradi.
π― Endi amaliyot: Faqat birinchi ro'yxatdagilar
EXCEPT ni amalda sinab ko'ring π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
UNION dublikatlarni olib tashlashi kerak. Buning uchun baza butun natijani saralaydi yoki hash-jadval quradi β bu qo'shimcha xotira va vaqt. Million qatorda farq sezilarli bo'ladi.UNION ALL esa shunchaki bir natijani ikkinchisiga ulaydi.π Amaliy qoida: dublikat bo'lishi mumkin emasligini bilsangiz (masalan, ikki jadvalda turli davrlar yoki turli manbalar), doim
UNION ALL yozing.Yana bir foydali naqsh β bir nechta ko'rsatkichni bitta jadvalda chiqarish:
SELECT 'Mijozlar' AS ko_rsatkich, COUNT(*) AS qiymat FROM customers
UNION ALL
SELECT 'Buyurtmalar', COUNT(*) FROM orders
UNION ALL
SELECT 'Faol mahsulotlar', COUNT(*) FROM products WHERE active;
Natija β kichik dashboard, bitta so'rovda. Hisobot yozganda juda qo'l keladi.
β οΈ Ustunlar tipi mos kelishi kerak: matn ustuniga son qo'shsangiz, baza xato beradi yoki jimgina tipni o'zgartiradi.
π― Endi amaliyot: Faqat birinchi ro'yxatdagilar
EXCEPT ni amalda sinab ko'ring π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
β Ertalabki masala: mijozlar qancha vaqt qoladi?
Jadval:
Vazifa: foydalanuvchilarni ro'yxatdan o'tgan oyi bo'yicha guruhlang va har bir guruhdan keyingi oylarda nechtasi qaytib kelganini hisoblang.
Bu β kogorta tahlili. Har bir mahsulot menejeri undan boshlaydi, chunki u bitta savolga javob beradi: mijozlar qolyaptimi yoki oqib ketyaptimi?
π― Bugun 13:00 da to'liq yechamiz. Bu β analitik ishga kirishda eng ko'p so'raladigan amaliy topshiriq.
βοΈ Qaysi funksiyalar kerak bo'ladi deb o'ylaysiz? π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
Jadval:
users(id, signup_date) va orders(user_id, order_date)Vazifa: foydalanuvchilarni ro'yxatdan o'tgan oyi bo'yicha guruhlang va har bir guruhdan keyingi oylarda nechtasi qaytib kelganini hisoblang.
Kogorta 0-oy 1-oy 2-oy
2026-07 100 42 28
2026-08 150 61 β
2026-09 210 β β
Bu β kogorta tahlili. Har bir mahsulot menejeri undan boshlaydi, chunki u bitta savolga javob beradi: mijozlar qolyaptimi yoki oqib ketyaptimi?
π― Bugun 13:00 da to'liq yechamiz. Bu β analitik ishga kirishda eng ko'p so'raladigan amaliy topshiriq.
βοΈ Qaysi funksiyalar kerak bo'ladi deb o'ylaysiz? π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
π Kogorta tahlili: bosqichma-bosqich
1-qadam: har foydalanuvchining kogortasi (ro'yxatdan o'tgan oyi)
2-qadam: har buyurtmani oyga bog'lash
3-qadam: farqni oyda hisoblash va sanash
Uch muhim nuqta:
πΉ
πΉ Foizga o'tkazish uchun har kogortaning 0-oyidagi soniga bo'linadi (window:
πΉ Oxirgi kogortalarda bo'sh kataklar bo'ladi β bu xato emas, hali vaqt o'tmagan.
π‘ Shu jadvalni ko'rib, biznes bitta savolga javob oladi: yangi mijoz olish kerakmi yoki borlarini ushlab qolishmi?
π― Endi amaliyot: Kogorta bo'yicha ushlab qolish
Saytda to'liq masala sifatida bor β yeching π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
1-qadam: har foydalanuvchining kogortasi (ro'yxatdan o'tgan oyi)
WITH kogorta AS (
SELECT id AS user_id,
DATE_TRUNC('month', signup_date) AS kogorta_oy
FROM users
),
2-qadam: har buyurtmani oyga bog'lash
faollik AS (
SELECT k.user_id, k.kogorta_oy,
DATE_TRUNC('month', o.order_date) AS faol_oy
FROM kogorta k
JOIN orders o ON o.user_id = k.user_id
)
3-qadam: farqni oyda hisoblash va sanash
SELECT kogorta_oy,
EXTRACT(YEAR FROM AGE(faol_oy, kogorta_oy)) * 12
+ EXTRACT(MONTH FROM AGE(faol_oy, kogorta_oy)) AS oy_raqami,
COUNT(DISTINCT user_id) AS foydalanuvchi
FROM faollik
GROUP BY 1, 2
ORDER BY 1, 2;
Uch muhim nuqta:
πΉ
COUNT(DISTINCT user_id) β bitta odam oyda 10 marta xarid qilsa ham, bir marta sanaladi.πΉ Foizga o'tkazish uchun har kogortaning 0-oyidagi soniga bo'linadi (window:
FIRST_VALUE).πΉ Oxirgi kogortalarda bo'sh kataklar bo'ladi β bu xato emas, hali vaqt o'tmagan.
π‘ Shu jadvalni ko'rib, biznes bitta savolga javob oladi: yangi mijoz olish kerakmi yoki borlarini ushlab qolishmi?
π― Endi amaliyot: Kogorta bo'yicha ushlab qolish
Saytda to'liq masala sifatida bor β yeching π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
πΌ Intervyuda Β«qanday yechgan bo'lardingiz?Β» deb so'rashadi
Bugungi kogorta masalasi β data analitik vakansiyalarida test topshirig'i sifatida beriladigan klassik misol. Uni bir marta yechgan odam suhbatda ishonch bilan gapiradi.
Muammo shundaki, bunday masalalarni o'z-o'zidan topib mashq qilish qiyin: real jadval kerak, ma'lumot kerak, javobni tekshiradigan kimdir kerak.
sqlmaster.uz da shu uchalasi ham bor:
πΉ 195 ta masala β bugungi kabi real biznes vaziyatlari: Uzum, Click, Payme, taksi, banklar
πΉ Yozasiz β tizim darrov tekshiradi. Bir nechta namuna ma'lumot to'plamida sinaladi, chekka holatlar ham
πΉ Muhokama bo'limi β boshqalarning yechimini ko'rasiz
Premium'da qo'shimcha (29 000 so'm/oy):
πΉ Har masalada 2-3 ta yechim: oddiydan optimalgacha, nega biri tezroq ekani tushuntirilgan
πΉ Query plan tahlili va index tavsiyalari
πΉ Kompaniya track'lari: Click, Payme, Uzum, EPAM va banklar uchun intervyu to'plamlari
πΉ 4 dialekt: PostgreSQL, MySQL, SQL Server, Oracle
π‘ Avval 50 ta masala bepul β karta kerak emas, 30 soniyada boshlaysiz.
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
Bugungi kogorta masalasi β data analitik vakansiyalarida test topshirig'i sifatida beriladigan klassik misol. Uni bir marta yechgan odam suhbatda ishonch bilan gapiradi.
Muammo shundaki, bunday masalalarni o'z-o'zidan topib mashq qilish qiyin: real jadval kerak, ma'lumot kerak, javobni tekshiradigan kimdir kerak.
sqlmaster.uz da shu uchalasi ham bor:
πΉ 195 ta masala β bugungi kabi real biznes vaziyatlari: Uzum, Click, Payme, taksi, banklar
πΉ Yozasiz β tizim darrov tekshiradi. Bir nechta namuna ma'lumot to'plamida sinaladi, chekka holatlar ham
πΉ Muhokama bo'limi β boshqalarning yechimini ko'rasiz
Premium'da qo'shimcha (29 000 so'm/oy):
πΉ Har masalada 2-3 ta yechim: oddiydan optimalgacha, nega biri tezroq ekani tushuntirilgan
πΉ Query plan tahlili va index tavsiyalari
πΉ Kompaniya track'lari: Click, Payme, Uzum, EPAM va banklar uchun intervyu to'plamlari
πΉ 4 dialekt: PostgreSQL, MySQL, SQL Server, Oracle
π‘ Avval 50 ta masala bepul β karta kerak emas, 30 soniyada boshlaysiz.
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
β Ertalabki savol: o'rtacha aldayaptimi?
Bo'limda 5 xodim. Maoshlari:
O'rtacha maosh: 11 800 000
Xodimlarning 80% i esa 5 500 000 dan kam oladi.
Hisobotda qaysi raqamni ko'rsatish to'g'ri?
A) O'rtacha (AVG)
B) Median
C) Ikkalasi ham
βοΈ Javobingizni izohda yozing. 13:00 da medianni SQL da qanday hisoblashni ko'rsataman π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
Bo'limda 5 xodim. Maoshlari:
4 000 000
4 500 000
5 000 000
5 500 000
40 000 000 β rahbar
O'rtacha maosh: 11 800 000
Xodimlarning 80% i esa 5 500 000 dan kam oladi.
Hisobotda qaysi raqamni ko'rsatish to'g'ri?
A) O'rtacha (AVG)
B) Median
C) Ikkalasi ham
βοΈ Javobingizni izohda yozing. 13:00 da medianni SQL da qanday hisoblashni ko'rsataman π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
π Median va persentil: AVG dan ko'ra halolroq raqam
PostgreSQL:
Window funksiyalar yo'q bazada β ROW_NUMBER hiylasi:
Bu qator soni juft ham, toq ham bo'lsa to'g'ri ishlaydi.
π Qachon nima:
β’ Maosh, chek, kutish vaqti β median (chetki qiymatlar ko'p)
β’ Umumiy summa muhim bo'lsa β AVG
β’ Xizmat sifati β p90 yoki p95 (eng yomon holatlar qanchalik yomon)
π‘ Β«Sahifa 0.3 soniyada ochiladiΒ» degani ko'pincha o'rtacha. p95 esa 4 soniya bo'lishi mumkin β foydalanuvchi shuni his qiladi.
π― Endi amaliyot: Bo'lim bo'yicha median maosh
Medianni o'zingiz hisoblang π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
AVG bitta chetdagi qiymatdan buziladi. Median esa Β«o'rtadagi odamΒ» ni ko'rsatadi va chetki qiymatlarga befarq.PostgreSQL:
SELECT department,
AVG(salary) AS ortacha,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary) AS median,
PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY salary) AS p90
FROM employees
GROUP BY department;
PERCENTILE_CONT β oraliq qiymatni interpolyatsiya qiladi.PERCENTILE_DISC β mavjud qiymatlardan birini qaytaradi.Window funksiyalar yo'q bazada β ROW_NUMBER hiylasi:
WITH t AS (
SELECT salary,
ROW_NUMBER() OVER (ORDER BY salary) AS rn,
COUNT(*) OVER () AS jami
FROM employees
)
SELECT AVG(salary) AS median
FROM t
WHERE rn IN ((jami + 1) / 2, (jami + 2) / 2);
Bu qator soni juft ham, toq ham bo'lsa to'g'ri ishlaydi.
π Qachon nima:
β’ Maosh, chek, kutish vaqti β median (chetki qiymatlar ko'p)
β’ Umumiy summa muhim bo'lsa β AVG
β’ Xizmat sifati β p90 yoki p95 (eng yomon holatlar qanchalik yomon)
π‘ Β«Sahifa 0.3 soniyada ochiladiΒ» degani ko'pincha o'rtacha. p95 esa 4 soniya bo'lishi mumkin β foydalanuvchi shuni his qiladi.
π― Endi amaliyot: Bo'lim bo'yicha median maosh
Medianni o'zingiz hisoblang π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
β
Javob: C β ikkalasi ham, lekin medianga urg'u bilan
Yaxshi hisobot bitta raqam bermaydi. To'g'ri javob β ikkalasini yonma-yon ko'rsatish va farqni izohlash. Ular orasidagi katta tafovutning o'zi muhim signal: taqsimot notekis.
Analitikning kuchi shu yerda ko'rinadi: so'rov yozish β texnika. Qaysi ko'rsatkichni tanlash va uni qanday tushuntirish β kasb.
π‘ Amaliy maslahat: hisobotga
π¬ Sizning hisobotlaringizda median ishlatiladimi yoki faqat o'rtacha?
π― Endi amaliyot: Window bilan median
Ikkinchi usul β window orqali π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
Yaxshi hisobot bitta raqam bermaydi. To'g'ri javob β ikkalasini yonma-yon ko'rsatish va farqni izohlash. Ular orasidagi katta tafovutning o'zi muhim signal: taqsimot notekis.
SELECT
department,
COUNT(*) AS xodim,
ROUND(AVG(salary)) AS ortacha,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary) AS median,
MAX(salary) AS eng_yuqori
FROM employees
GROUP BY department
ORDER BY median DESC;
Analitikning kuchi shu yerda ko'rinadi: so'rov yozish β texnika. Qaysi ko'rsatkichni tanlash va uni qanday tushuntirish β kasb.
π‘ Amaliy maslahat: hisobotga
COUNT(*) ni doim qo'shing. 3 ta xodimli bo'limning Β«o'rtacha maoshiΒ» haqida xulosa chiqarib bo'lmaydi, lekin sonini ko'rsatmasangiz, buni hech kim bilmaydi.π¬ Sizning hisobotlaringizda median ishlatiladimi yoki faqat o'rtacha?
π― Endi amaliyot: Window bilan median
Ikkinchi usul β window orqali π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
COALESCE(NULL, NULL, 'Aziz', 'Bekzod') nima qaytaradi?
Anonymous Quiz
0%
NULL
80%
'Aziz'
20%
'Aziz Bekzod'
π Shartli mantiq: CASE, COALESCE, NULLIF
CASE β SQL dagi Β«agarΒ»:
β οΈ Shartlar yuqoridan pastga tekshiriladi, birinchi mos kelgani g'olib. Shuning uchun tartib muhim: eng qattiq shart yuqorida bo'lsin.
COALESCE β birinchi NULL bo'lmagan qiymat:
Zaxira qiymatlar zanjiri: taxallus bo'lmasa ism, u ham bo'lmasa Β«MehmonΒ».
NULLIF β ikki qiymat teng bo'lsa NULL qaytaradi. Asosan nolga bo'lishdan himoya uchun:
GREATEST / LEAST β bir necha ustundan eng katta yoki eng kichigi:
π‘
π― Endi amaliyot: Zaxira qiymatlar zanjiri
COALESCE zanjirini amalda yozing π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
CASE β SQL dagi Β«agarΒ»:
SELECT name,
CASE
WHEN amount >= 10000000 THEN 'VIP'
WHEN amount >= 1000000 THEN 'Doimiy'
ELSE 'Yangi'
END AS daraja
FROM customers;
β οΈ Shartlar yuqoridan pastga tekshiriladi, birinchi mos kelgani g'olib. Shuning uchun tartib muhim: eng qattiq shart yuqorida bo'lsin.
ELSE yozilmasa, mos kelmagan qatorlar NULL oladi.COALESCE β birinchi NULL bo'lmagan qiymat:
SELECT COALESCE(nickname, first_name, 'Mehmon') AS ism
FROM users;
Zaxira qiymatlar zanjiri: taxallus bo'lmasa ism, u ham bo'lmasa Β«MehmonΒ».
NULLIF β ikki qiymat teng bo'lsa NULL qaytaradi. Asosan nolga bo'lishdan himoya uchun:
SELECT summa / NULLIF(soni, 0) AS ortacha_chek FROM orders;
GREATEST / LEAST β bir necha ustundan eng katta yoki eng kichigi:
SELECT GREATEST(updated_at, created_at) AS oxirgi_ozgarish FROM docs;
π‘
CASE ni SUM yoki COUNT ichiga qo'ysangiz β bitta so'rovda bir nechta shartli ko'rsatkich chiqaradi. Kecha ko'rgan pivot shu tamoyilga qurilgan.π― Endi amaliyot: Zaxira qiymatlar zanjiri
COALESCE zanjirini amalda yozing π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
β
Javob: 'Aziz'
Eng ko'p ishlatiladigan uch holat:
1οΈβ£ Hisobotda bo'sh katak o'rniga nol
Busiz buyurtmasi yo'q mijozda NULL turadi va Excel'ga eksport qilganda bo'sh katak bo'lib qoladi.
2οΈβ£ Matnlarni birlashtirish. NULL qo'shilsa, butun natija NULL bo'ladi:
3οΈβ£ Saralashda NULL ni oxiriga surish
β οΈ
π¬ Hisobotlaringizda NULL ni qanday ko'rsatasiz β 0 mi, chiziqchami?
π― Endi amaliyot: Talabaning to'liq ismi
Matn birlashtirish va NULL β amalda π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
COALESCE ro'yxatni chapdan o'ngga tekshiradi va birinchi NULL bo'lmagan qiymatni qaytaradi. Qolganlari hisoblanmaydi ham β bu muhim, chunki ichida og'ir subquery bo'lsa, u bajarilmaydi.Eng ko'p ishlatiladigan uch holat:
1οΈβ£ Hisobotda bo'sh katak o'rniga nol
SELECT c.name, COALESCE(SUM(o.amount), 0) AS jami
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
Busiz buyurtmasi yo'q mijozda NULL turadi va Excel'ga eksport qilganda bo'sh katak bo'lib qoladi.
2οΈβ£ Matnlarni birlashtirish. NULL qo'shilsa, butun natija NULL bo'ladi:
'Aziz' || NULL β NULL'Aziz' || COALESCE(NULL, '') β 'Aziz'3οΈβ£ Saralashda NULL ni oxiriga surish
ORDER BY COALESCE(rating, 0) DESC yoki PostgreSQL da ORDER BY rating DESC NULLS LASTβ οΈ
COALESCE bilan NULL ni yashirishdan oldin bir savol bering: bu NULL nega paydo bo'ldi? Ba'zan u JOIN dagi xatoning belgisi bo'ladi, siz esa uni nol bilan yopib qo'yasiz.π¬ Hisobotlaringizda NULL ni qanday ko'rsatasiz β 0 mi, chiziqchami?
π― Endi amaliyot: Talabaning to'liq ismi
Matn birlashtirish va NULL β amalda π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
π sqlmaster.uz'da yangi bo'lim β Β«O'rganishΒ»
Kanaldagi qisqa postlarning to'liq versiyasi endi saytda: har bir mavzu bo'yicha tushuntirish, misol jadval, so'rov va natija, ko'p uchraydigan xatolar va oxirida shu mavzudagi masalalar.
Hozir 9 ta darslik:
β’ SQL so'rovi qaysi tartibda bajariladi
β’ WHERE va HAVING farqi
β’ GROUP BY asoslari
β’ INNER JOIN va LEFT JOIN farqi
β’ NULL bilan ishlash β nega = NULL ishlamaydi
β’ COALESCE va CASE
β’ Subquery yoki JOIN
β’ CTE (WITH)
β’ ROW_NUMBER, RANK va DENSE_RANK
Hammasi bepul. Darslikni o'qib bo'lgach, shu mavzudagi masalani saytning o'zida yechib ko'rasiz β tizim darhol tekshiradi.
π·πΊ π¬π§ Darsliklar rus va ingliz tillarida ham bor.
π sqlmaster.uz/learn
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
Kanaldagi qisqa postlarning to'liq versiyasi endi saytda: har bir mavzu bo'yicha tushuntirish, misol jadval, so'rov va natija, ko'p uchraydigan xatolar va oxirida shu mavzudagi masalalar.
Hozir 9 ta darslik:
β’ SQL so'rovi qaysi tartibda bajariladi
β’ WHERE va HAVING farqi
β’ GROUP BY asoslari
β’ INNER JOIN va LEFT JOIN farqi
β’ NULL bilan ishlash β nega = NULL ishlamaydi
β’ COALESCE va CASE
β’ Subquery yoki JOIN
β’ CTE (WITH)
β’ ROW_NUMBER, RANK va DENSE_RANK
Hammasi bepul. Darslikni o'qib bo'lgach, shu mavzudagi masalani saytning o'zida yechib ko'rasiz β tizim darhol tekshiradi.
π·πΊ π¬π§ Darsliklar rus va ingliz tillarida ham bor.
π sqlmaster.uz/learn
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
β Ertalabki masala: to'planib boruvchi yig'indi
Jadval:
Vazifa: har kun uchun o'sha kungi savdo va oy boshidan beri to'plangan jamini chiqaring.
β οΈ Bu masalani
π― Bunday hisobotlar Β«kumulyativΒ» yoki Β«running totalΒ» deb ataladi. Moliyaviy hisobotlarning yarmi shu ko'rinishda.
βοΈ Qaysi funksiya kerak? Izohda yozing π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
Jadval:
daily_sales(sale_date, amount)Vazifa: har kun uchun o'sha kungi savdo va oy boshidan beri to'plangan jamini chiqaring.
kun kunlik jami
01-okt 120 120
02-okt 80 200
03-okt 150 350
β οΈ Bu masalani
GROUP BY bilan yechib bo'lmaydi: har qatorda o'zidan oldingi barcha qatorlar yig'indisi kerak.π― Bunday hisobotlar Β«kumulyativΒ» yoki Β«running totalΒ» deb ataladi. Moliyaviy hisobotlarning yarmi shu ko'rinishda.
βοΈ Qaysi funksiya kerak? Izohda yozing π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz