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
πͺ Window frame: Β«qaysi qatorlargacha hisoblansin?Β»
Window funksiya faqat guruhlamaydi β u oyna ichida ishlaydi. Oynaning chegarasini siz belgilaysiz.
Running total (to'planib boruvchi yig'indi):
Β«Boshidan to shu qatorgachaΒ» β
Siljuvchi o'rtacha (3 kunlik):
Grafikdagi tebranishni tekislaydi, trend ko'rinadi.
β οΈ Katta tuzoq:
Shuning uchun aniqlik kerak bo'lsa β doim
π‘ Xuddi shu tuzoq
π― Endi amaliyot: 3 kunlik siljuvchi o'rtacha
Frame bilan ishlashni mustahkamlang π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz
Window funksiya faqat guruhlamaydi β u oyna ichida ishlaydi. Oynaning chegarasini siz belgilaysiz.
Running total (to'planib boruvchi yig'indi):
SELECT sale_date, amount,
SUM(amount) OVER (
ORDER BY sale_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS jami
FROM daily_sales;
Β«Boshidan to shu qatorgachaΒ» β
UNBOUNDED PRECEDING dan CURRENT ROW gacha.Siljuvchi o'rtacha (3 kunlik):
AVG(amount) OVER (
ORDER BY sale_date
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
)
Grafikdagi tebranishni tekislaydi, trend ko'rinadi.
β οΈ Katta tuzoq:
ORDER BY yozib, frame ko'rsatmasangiz, standart qiymat RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW bo'ladi. RANGE esa teng qiymatlarni bitta deb qaraydi: bir kunda ikki yozuv bo'lsa, ikkalasi ham bir xil jami oladi.Shuning uchun aniqlik kerak bo'lsa β doim
ROWS deb yozing.π‘ Xuddi shu tuzoq
LAST_VALUE da ham bor: frame ko'rsatilmasa, u Β«oxirgi qatorΒ» o'rniga Β«joriy qatorΒ» ni qaytaradi va odamlar buni bug deb o'ylashadi.π― Endi amaliyot: 3 kunlik siljuvchi o'rtacha
Frame bilan ishlashni mustahkamlang π
ββββββββ
πΎ Amaliyot: sqlmaster.uz
π’ @sqlmasteruz