Qaysi biri uchun oyiga ~29 000 soβm toβlagan boβlardingiz?
Anonymous Poll
60%
Advanced darslar + masalalar
20%
Intervyu tayyorgarlik trackβi
40%
Hech biri, bepul yetadi
π SQL Masterβda katta yangilanish tayyorlanyapti
Yaqin orada sqlmaster.uzβga mavzular boβyicha darslar, yangi masalalar va yana bir nechta yangiliklar qoβshiladi. Nimani birinchi qilishimizni esa siz hal qilasiz. Yuqoridagi soβrovnomada ovoz bering π
π Bitta iltimos:
SQL oβrganayotgan yoki intervyuga tayyorlanayotgan bitta doβstingizga shu kanalni yuboring. Sizga 10 soniya, unga esa haqiqatan foydali manba.
Biz qanchalik koβp boβlsak, oβzbek tilida shuncha sifatli SQL kontent chiqara olamiz.
πΎ sqlmaster.uz
π’ @sqlmasteruz
Yaqin orada sqlmaster.uzβga mavzular boβyicha darslar, yangi masalalar va yana bir nechta yangiliklar qoβshiladi. Nimani birinchi qilishimizni esa siz hal qilasiz. Yuqoridagi soβrovnomada ovoz bering π
π Bitta iltimos:
SQL oβrganayotgan yoki intervyuga tayyorlanayotgan bitta doβstingizga shu kanalni yuboring. Sizga 10 soniya, unga esa haqiqatan foydali manba.
Biz qanchalik koβp boβlsak, oβzbek tilida shuncha sifatli SQL kontent chiqara olamiz.
πΎ sqlmaster.uz
π’ @sqlmasteruz
SQLMaster.uz
SQLMaster.uz β SQL masalalar va amaliyot platformasi
SQL o'rganish va amaliyot platformasi: real jadvallar asosidagi PostgreSQL masalalarini yeching, yechimni onlayn tekshiring, musobaqalarda qatnashing.
β‘1π1π1π1
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