Agregatsiya va oyna funksiyalari
terminal
Amaliy lablar
Ushbu darsga biriktirilgan interaktiv topshiriqlar — real Kubernetes muhitida bajaring va natijani tekshiring.
terminal
PostgreSQL: GROUP BY va HAVING — guruhlangan hisobot
Osonbolt+15 XP
Mahsulotlar bo'yicha savdo hisoboti kerak, lekin faqat sezilarli hajmdagilar — mayda mahsulotlar hisobotni chalkashtirmasin. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. sotuv jadvalida 54 qator bor: 6 kun (2026-01-01 .. 2026-01-06), 3 viloyat (Buxoro, Samarqand, Toshkent), 3 mahsulot (cpu, disk, ram). ball jadvalida 6 o'quvchi bahosi (tenglik bilan). Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi (ustunlar tartibi va qator tartibi ham muhim). Vazifa So'rov yozing: har mahsulot uchun summa yig'indisini jami nomi bilan chiqarsin, FAQAT yig'indisi 5300 dan katta bo'lganlar qolsin, natija jami bo'yicha KAMAYISH tartibida (teng bo'lsa mahsulot bo'yicha). Muvaffaqiyat mezoni (jonli) /root/db/query.sql bajarilganda natija AYNAN quyidagicha bo'lishi (qatorlar ;, ustunlar | bilan ko'rsatilgan): cpu|5715;disk|5449
terminal
PostgreSQL: ROW_NUMBER() — har guruhdan eng yaxshisi (top-N per group)
Osonbolt+20 XP
Har viloyatning ENG KATTA bitta savdosini topish kerak. group by bilan maksimal summani olish oson, lekin SHU qatorning mahsulotini bilib bo'lmaydi — agregatsiya qolgan ustunlarni yo'q qiladi. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. sotuv jadvalida 54 qator bor: 6 kun (2026-01-01 .. 2026-01-06), 3 viloyat (Buxoro, Samarqand, Toshkent), 3 mahsulot (cpu, disk, ram). ball jadvalida 6 o'quvchi bahosi (tenglik bilan). Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi (ustunlar tartibi va qator tartibi ham muhim). Vazifa So'rov yozing: har viloyat uchun ENG KATTA summa li qatorni topib, viloyat, mahsulot, summa ustunlarini chiqarsin. Tenglik bo'lsa KICHIK id li qator tanlansin. Natija viloyat bo'yicha o'sish tartibida. Maslahat: row number() over (partition by ... order by ...) va tashqi so'rovda where rn = 1. Muvaffaqiyat mezoni (jonli) /root/db/query.sql bajarilganda natija AYNAN quyidagicha bo'lishi (qatorlar ;, ustunlar | bilan ko'rsatilgan): Buxoro|cpu|498;Samarqand|cpu|491;Toshkent|disk|484
terminal
PostgreSQL: RANK() va DENSE_RANK() — tenglikda qanday farq qiladi
Osonbolt+20 XP
Reyting jadvalida teng ballar bor. Ikki o'quvchi 1-o'rinni bo'lishsa, keyingisi 2-mi yoki 3-mi? Javob QAYSI funksiya ishlatilganiga bog'liq. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. sotuv jadvalida 54 qator bor: 6 kun (2026-01-01 .. 2026-01-06), 3 viloyat (Buxoro, Samarqand, Toshkent), 3 mahsulot (cpu, disk, ram). ball jadvalida 6 o'quvchi bahosi (tenglik bilan). Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi (ustunlar tartibi va qator tartibi ham muhim). Vazifa ball jadvali uchun so'rov yozing: ism, ball, rank() natijasi (r) va dense rank() natijasi (dr) — ikkovi ham ball bo'yicha KAMAYISH tartibida hisoblanadi. Natija ball kamayishi, keyin ism o'sishi bo'yicha. Muvaffaqiyat mezoni (jonli) /root/db/query.sql bajarilganda natija AYNAN quyidagicha bo'lishi (qatorlar ;, ustunlar | bilan ko'rsatilgan): Ali|95|1|1;Vali|95|1|1;Guli|88|3|2;Hasan|88|3|2;Olim|70|5|3;Sardor|60|6|4
terminal
PostgreSQL: LAG() — oldingi qator bilan solishtirish (kunlik o'zgarish)
Osonbolt+20 XP
Kunlik savdo hisobotida "kechagiga nisbatan qancha o'zgardi" ustuni kerak. Bu — qatorni O'ZIDAN OLDINGI qator bilan solishtirish. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. sotuv jadvalida 54 qator bor: 6 kun (2026-01-01 .. 2026-01-06), 3 viloyat (Buxoro, Samarqand, Toshkent), 3 mahsulot (cpu, disk, ram). ball jadvalida 6 o'quvchi bahosi (tenglik bilan). Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi (ustunlar tartibi va qator tartibi ham muhim). Vazifa So'rov yozing: Toshkent viloyati uchun har kunning kun sanasi, kunlik yig'indisi (jami) va OLDINGI kunga nisbatan o'zgarishi (ozgarish) chiqarilsin. ⚠BIRINCHI kunda oldingi qator yo'q — o'zgarish 0 bo'lsin (NULL emas). Maslahat: lag(jami, 1, jami) — uchinchi argument sukut qiymati. Natija kun o'sish tartibida. Muvaffaqiyat mezoni (jonli) /root/db/query.sql bajarilganda natija AYNAN quyidagicha bo'lishi (qatorlar ;, ustunlar | bilan ko'rsatilgan): 2026-01-01|830|0;2026-01-02|941|111;2026-01-03|1052|111;2026-01-04|763|-289;2026-01-05|874|111;2026-01-06|985|111
terminal
PostgreSQL: yig'iluvchi jami (running total) — oyna freymi
Osonbolt+20 XP
Boshqaruv panelida "oyning boshidan hozirgacha jami" ustuni kerak: har kun qatorida shu kungacha yig'ilgan summa. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. sotuv jadvalida 54 qator bor: 6 kun (2026-01-01 .. 2026-01-06), 3 viloyat (Buxoro, Samarqand, Toshkent), 3 mahsulot (cpu, disk, ram). ball jadvalida 6 o'quvchi bahosi (tenglik bilan). Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi (ustunlar tartibi va qator tartibi ham muhim). Vazifa So'rov yozing: har kunning kun sanasi, kunlik yig'indisi (jami, barcha viloyatlar) va boshidan shu kungacha YIG'ILGAN summa (yigindi). ⚠Freymni ANIQ ko'rsating: rows between unbounded preceding and current row. Natija kun o'sish tartibida. Muvaffaqiyat mezoni (jonli) /root/db/query.sql bajarilganda natija AYNAN quyidagicha bo'lishi (qatorlar ;, ustunlar | bilan ko'rsatilgan): 2026-01-01|2890|2890;2026-01-02|2825|5715;2026-01-03|2758|8473;2026-01-04|2691|11164;2026-01-05|2624|13788;2026-01-06|2557|16345
terminal
PostgreSQL: siljuvchi o'rtacha (moving average) — silliqlangan trend
Murakkabbolt+30 XP
Kunlik raqamlar sakraydi va trendni ko'rish qiyin. Standart yechim — 3 kunlik siljuvchi o'rtacha. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. sotuv jadvalida 54 qator bor: 6 kun (2026-01-01 .. 2026-01-06), 3 viloyat (Buxoro, Samarqand, Toshkent), 3 mahsulot (cpu, disk, ram). ball jadvalida 6 o'quvchi bahosi (tenglik bilan). Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi (ustunlar tartibi va qator tartibi ham muhim). Vazifa So'rov yozing: har kunning kun, kunlik jami va SHU KUN bilan OLDINGI IKKI kunning o'rtachasi (ortacha) chiqarilsin. ⚠O'rtacha bir xonali kasrgacha yaxlitlansin: round(..., 1). ⚠Freym: rows between 2 preceding and current row. Natija kun o'sish tartibida. Muvaffaqiyat mezoni (jonli) /root/db/query.sql bajarilganda natija AYNAN quyidagicha bo'lishi (qatorlar ;, ustunlar | bilan ko'rsatilgan): 2026-01-01|2890|2890.0;2026-01-02|2825|2857.5;2026-01-03|2758|2824.3;2026-01-04|2691|2758.0;2026-01-05|2624|2691.0;2026-01-06|2557|2624.0
terminal
PostgreSQL: NTILE() va PERCENT_RANK() — persentil guruhlar
Murakkabbolt+30 XP
O'quvchilarni ballari bo'yicha uchta guruhga (yuqori, o'rta, past) bo'lish kerak. Chegaralarni QO'LDA yozish yaramaydi — ma'lumot o'zgarsa buziladi. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. sotuv jadvalida 54 qator bor: 6 kun (2026-01-01 .. 2026-01-06), 3 viloyat (Buxoro, Samarqand, Toshkent), 3 mahsulot (cpu, disk, ram). ball jadvalida 6 o'quvchi bahosi (tenglik bilan). Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi (ustunlar tartibi va qator tartibi ham muhim). Vazifa ball jadvali uchun so'rov yozing: ism, ball, ntile(3) guruhi (guruh) va percent rank() natijasi (foiz) chiqarilsin — ikkovi ham ball KAMAYISH tartibida hisoblanadi. ⚠foiz ikki xonali kasrgacha yaxlitlansin: round(percent rank() over (...)::numeric, 2). Natija ball kamayishi, keyin ism o'sishi bo'yicha. Muvaffaqiyat mezoni (jonli) /root/db/query.sql bajarilganda natija AYNAN quyidagicha bo'lishi (qatorlar ;, ustunlar | bilan ko'rsatilgan): Ali|95|1|0.00;Vali|95|1|0.00;Guli|88|2|0.40;Hasan|88|2|0.40;Olim|70|3|0.80;Sardor|60|3|1.00
terminal
PostgreSQL: FIRST_VALUE / LAST_VALUE va sukut freym tuzog'i
Murakkabbolt+30 XP
Har kun qatorida davrning BIRINCHI va OXIRGI kunlik qiymatini ko'rsatish kerak. first value darhol ishlaydi, last value esa — ishlaganday ko'rinadi, lekin NOTO'G'RI natija beradi. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. sotuv jadvalida 54 qator bor: 6 kun (2026-01-01 .. 2026-01-06), 3 viloyat (Buxoro, Samarqand, Toshkent), 3 mahsulot (cpu, disk, ram). ball jadvalida 6 o'quvchi bahosi (tenglik bilan). Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi (ustunlar tartibi va qator tartibi ham muhim). Vazifa So'rov yozing: Toshkent viloyati uchun har kunning kun, kunlik jami, davrning BIRINCHI kunlik qiymati (birinchi) va OXIRGI kunlik qiymati (oxirgi) chiqarilsin. ⚠oxirgi uchun freymni ANIQ ko'rsatish SHART: rows between unbounded preceding and unbounded following. Aks holda last value har qatorda O'ZINI qaytaradi. Natija kun o'sish tartibida. Muvaffaqiyat mezoni (jonli) /root/db/query.sql bajarilganda natija AYNAN quyidagicha bo'lishi (qatorlar ;, ustunlar | bilan ko'rsatilgan): 2026-01-01|830|830|985;2026-01-02|941|830|985;2026-01-03|1052|830|985;2026-01-04|763|830|985;2026-01-05|874|830|985;2026-01-06|985|830|985
terminal
PostgreSQL: DISTINCT ON — har guruhdan eng yangi qator (PostgreSQL usuli)
Murakkabbolt+30 XP
Har mahsulotning ENG OXIRGI savdosini topish kerak — juda ko'p uchraydigan vazifa. PostgreSQL da buning uchun maxsus, qisqa sintaksis bor. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. sotuv jadvalida 54 qator bor: 6 kun (2026-01-01 .. 2026-01-06), 3 viloyat (Buxoro, Samarqand, Toshkent), 3 mahsulot (cpu, disk, ram). ball jadvalida 6 o'quvchi bahosi (tenglik bilan). Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi (ustunlar tartibi va qator tartibi ham muhim). Vazifa So'rov yozing: har mahsulot uchun ENG KEYINGI (kun bo'yicha) savdoni topib mahsulot, kun, viloyat, summa chiqarsin. Bir kunda bir necha savdo bo'lsa: KATTA summa li, keyin KICHIK id li qator tanlansin. ⚠distinct on ishlatilishi SHART (row number emas). Natija mahsulot o'sish tartibida. Muvaffaqiyat mezoni (jonli) /root/db/query.sql bajarilganda natija AYNAN quyidagicha bo'lishi (qatorlar ;, ustunlar | bilan ko'rsatilgan): cpu|2026-01-02|Samarqand|491;disk|2026-01-04|Buxoro|477;ram|2026-01-06|Toshkent|461
terminal
PostgreSQL: ulush foizi — oyna agregati (E temasi yakuni)
Murakkabbolt+30 XP
Hisobotda "har mahsulot umumiy savdoning necha foizi" ustuni kerak. Umumiy yig'indi ham, qator qiymati ham BIR SO'ROVDA kerak. Ish katalogi: /root/db/. Bazada HAQIQIY PostgreSQL 16 ishlaydi (unix socket, psql -h /tmp -d hn). Checker JONLI tekshiradi: so'rov NATIJASI, katalog holati (pg indexes, pg constraint, pg roles), EXPLAIN (format json) rejasi va ma'lumotning haqiqiy o'zgarishi. ⚠psql ni postgres foydalanuvchisi ostida chaqirish kerak: su postgres -c "psql -h /tmp -d hn -c '...'" yoki -f fayl.sql. ⚠Server root ostida ishlamaydi — shuning uchun barcha psql chaqiruvlari postgres foydalanuvchisi nomidan bajariladi. sotuv jadvalida 54 qator bor: 6 kun (2026-01-01 .. 2026-01-06), 3 viloyat (Buxoro, Samarqand, Toshkent), 3 mahsulot (cpu, disk, ram). ball jadvalida 6 o'quvchi bahosi (tenglik bilan). Javobni /root/db/query.sql fayliga YOZING — checker uni bajarib natijani AYNAN solishtiradi (ustunlar tartibi va qator tartibi ham muhim). Vazifa So'rov yozing: har mahsulot uchun jami (summa yig'indisi) va uning UMUMIY savdodagi ulushi foizda (ulush) chiqarilsin. ⚠Foiz bir xonali kasrgacha yaxlitlansin va 100.0 (kasr) bilan ko'paytirilsin — butun sonlarga bo'lish 0 beradi. ⚠Umumiy yig'indi uchun sum(jami) over () — order by SIZ bo'sh oyna butun natijani qamrab oladi. Ikkinchi so'rov yoki join KERAK EMAS. Natija jami kamayishi, keyin mahsulot o'sishi bo'yicha. Muvaffaqiyat mezoni (jonli) /root/db/query.sql bajarilganda natija AYNAN quyidagicha bo'lishi (qatorlar ;, ustunlar | bilan ko'rsatilgan): cpu|5715|35.0;disk|5449|33.3;ram|5181|31.7
