{
  "assessmentTests": {
    "sql_test": {
      "name": "SQL Testi",
      "desc": "Filtrlash, birlashtirish, agregatsiya, kichik so'rovlar va oynali funksiyalar boʻyicha 30 ta vaziyatli savol — SQL-ingiz ish eʼlonida SQL professionalligi degani nima bo'lishini moslashtiring.",
      "recommendation": "Sizning SQL koʻnikmalari profili",
      "results": {
        "beginner": {
          "name": "Boshlangiches",
          "desc": "Siz ishlayotgan SELECT iborasi yoza olasiz va bir nechta shartlarni filtrlashi olasiz, lekin noto'g'ri qilgan savollar NULL bilan ishlash va birlashtirish mexanikasi atrofida to'planadi, sintaksisga emas — ustun NULL bilan = orqali taqqoslash, LEFT JOIN aslida nima saqlayotgani, BETWEEN chegaralari aynan qanday ishlashi. Bu ma'lumotlar bazasi bilan yomon bo'lish haqida emas; bu trial va error bilan SQL o'rganganlarga asboblarni ma'lum qoidalari bo'lib, qalayin yozgan qoidalari. Ular ishda muhim, chunki har biri — qidiriladigan qatorlar soni qaytargan qidiriladigan noto'g'ri qatorlarning joyi.",
          "recommendation": "Uchta narsadan boshlang, shu tartibda: nima uchun WHERE col = NULL hech qachon mos kelmaydi (va IS NULL zarur), INNER JOIN qanday mos kelmaydigan qatorlarni tashlab, LEFT JOIN ularni saqlaydi, va aynan BETWEEN chegaralari. Mode Analytics SQL qoʻllanmasi va PostgreSQL dokumentatsiyasi ham barcha uchta ishlatiladigan misollar bilan qamrab oladi."
        },
        "intermediate": {
          "name": "Oʻrta daraja",
          "desc": "Siz kundalik hisobot so'rovlarini qulay bajaray olasiz — birlashtirish, GROUP BY, oddiy filtrlash — va maʼlumot tahlili va dashboard rutina ishi sekinlashmaysiz. Yoʻli Advanced dan qoʻliklarning o'zaro ta'sir qilishi: WHERE klauzulasi birlashtirish qilingan jadvaldagi LEFT JOIN orqali INNER JOINga aylanmaydi, bir oʻz-o'ziga aytilgan qatorlarni har biriga qayta qoshadi, NOT IN NULL tubida bo'ladigan subsorgu orqali sukutda hech narsani qaytarmaydi. Bu shular tez bir ko'rish va faqat boshqa hisobotga solishtirganda yuzaga keladigan xatolar.",
          "recommendation": "Qanday klauzulaning o'zaro ta'siri bo'lishiga e'tibor bering, hamma bo'yicha emas: WHERE LEFT JOINning o'ng qsimidagi ustunlar bilan filtrlash, birlashtirish oldin vaqt ko'paytirmalari siz ularni agregat qilishingizdan oldin, va nima uchun NOT IN NULL bilan buziladi (EXISTS odatda bo'lmaydi). Keyin HAVING vs WHERE, shu almashtiruv ikkala klauzulani alohida bilimlini buzadi."
        },
        "advanced": {
          "name": "Ilg'or",
          "desc": "Bu darajada ish eʼlonida \"kuchli SQL\" deb atashadi. Siz ko'p birlashtirish so'ruvni o'qiy olasiz va uni ishga tushirishdan oldin qatorlar sonini bashorat qila olasiz, nima uchun natija o'zgarganini bilasiz, va murakkab kichik so'rovning o'rniga CTE yoki oynali funksiyani qo'llanasiz. Bu bandni chekka narsalardan bo'lishi: qaysi reytinqlash funksiyasini foydalanish o'zaro bog'lanishga, qanday COMMIT ko'rinadi, va qanday bo'sh ON DELETE qoidasi aslida ma'lumotlar baza darajasida ishlayotgani bilish.",
          "recommendation": "Boshqa odamlar ham teginishi kerak bo'lgan ma'lumotlar muhofaza qiluvchi qismlarni bosing: RANK, DENSE_RANK va ROW_NUMBER farqlari o'zaro bog'lanishda, qanday COMMIT ko'rinyapti va kimga, va xorijiy kalit xulosi DELETE. Index yangliklari yoki SQL for Devs oynali funksiyalar va tranzaksiya izolyatsiyasidan chuqur suydirmalari yana shu to'xtalishning keyingi qadami sifatida ishlatiladi."
        },
        "expert": {
          "name": "Mutaxassis",
          "desc": "Siz har bir bo'lim boʻylab eng yuqori ballga erishdingiz — filtrlash va NULL semantikasi, birlashtirish va to'plam amaliyotlari, agregatsiya va kichik so'rovlar, va oynali funksiyalar, CTE va cheklovlar. Amaliy jihatdan, bu o'zga odam multibirlashgan hisobot so'ruvni berilganligi va uni nima uchun qaytarganini tushuntira olasiz, faqat sintaksis degani emas, bu qiyin va ko'proq baho qiluvchi ko'nikma. Shu darajada so'rov tili odatdan o'tish chegara bo'lmaydi; chegara odatda sxema dizayni yoki uning ostidagi ma'lumotlar kattaligi.",
          "recommendation": "Qaytarilganlar shu vaqtda bajarilish rejasi va dizayn: EXPLAIN chiqishini o'qish oldin so'rov sekin bo'lishi faraz qilishdan oldin, indekslash strategiyasi tekin g'alaba o'rniga yozyc'a bilan almashtirish, va sxema o'sib borgan vaqtda turadigan normallashtirilish qarorlari. Agar rol uchun skriniingiz bo'lsa, bitta so'rov xatosini tasvirlab bering, masalan, birlashtirish ventili yoki NOT IN/NULL tuzoq, uni bitta o'tkazilib bo'lgan SQL xususiyatlari nomi o'rniga — bu fikrlashni, faqat emas lug'atni namoy etadi."
        }
      },
      "questions": [
        {
          "question": "Jadvaldagi yaş ustuni bo'sh bo'lishi mumkin. SELECT * FROM users WHERE age = NULL ishga tushirasiz. Bu qancha qatorno qaytaradi, hatto bir nechta qatorlar yaşga NULL ni saqlasa ham?",
          "options": [
            {
              "icon": "",
              "label": "Har bir qator bu yaş NULL, chunki = boshqa qiymat kabi NULL mos keladi"
            },
            {
              "icon": "",
              "label": "Nol — NULL bilan = orqali taqqoslash hech qachon TRUE qaytarmaydi, shuning uchun hech qator mos kelmaydi; IS NULL zarur"
            },
            {
              "icon": "",
              "label": "Sintaksisning xatosi — NULL = o'ng tomonida bo'lishi mumkin emas"
            },
            {
              "icon": "",
              "label": "Jadvalning har bir qatori, chunki NULL taqqoslashlar standart TRUE qaytaradi"
            }
          ]
        },
        {
          "question": "SELECT DISTINCT department, role FROM employees ishga tushirasiz. DISTINCT nima nusxalashini olib tashlaydi?",
          "options": [
            {
              "icon": "",
              "label": "Department va role birga kombinatsiyasi — qator faqat boshqa qatordagi ikkala ustun aynan mos kelmasa olib tashlanadi"
            },
            {
              "icon": "",
              "label": "Faqat nusxa department qiymatlari, har bir role saqlash"
            },
            {
              "icon": "",
              "label": "Faqat nusxa role qiymatlari, har bir department saqlash"
            },
            {
              "icon": "",
              "label": "Hech nima — DISTINCT faqat bitta ustun bilan ishlaydi"
            }
          ]
        },
        {
          "question": "Ustun name WHERE name LIKE 'A_' bilan filtrlangan. Qaysi qiymatlar mos keladi: 'A', 'Al', 'Ana', 'Ally'?",
          "options": [
            {
              "icon": "",
              "label": "'A' — pastki chiziq ixtiyoriy va nol yoki undan koʻp belgilar mos keladi"
            },
            {
              "icon": "",
              "label": "'Al' — pastki chiziq aynan bitta belgiga mos keladi, shuning uchun LIKE 'A_' A bilan boshlanuvchi istalgan ikki belgili satrni mos keladi"
            },
            {
              "icon": "",
              "label": "'Ana' va 'Ally' — pastki chiziq har qanday oxiri belgiga mos keladi"
            },
            {
              "icon": "",
              "label": "Barcha toʻrt qiymat mos keladi, chunki LIKE uzunlikni e'tiborsiz qoldiradi"
            }
          ]
        },
        {
          "question": "Narx ustuni WHERE price BETWEEN 10 AND 20 bilan filtrlangan. Narx aynan 10 yoki aynan 20 bo'lgan qatorlar kiritilgan?",
          "options": [
            {
              "icon": "",
              "label": "Yoʻq — BETWEEN ikkala oxiri ham olib tashlaydi"
            },
            {
              "icon": "",
              "label": "Ha — BETWEEN ikkala oxirga kiradi, price >= 10 AND price <= 20 ekvivalenti"
            },
            {
              "icon": "",
              "label": "Faqat price = 10 kiritiladi; yuqori chegara eksklyuziv"
            },
            {
              "icon": "",
              "label": "Faqat price = 20 kiritiladi; pastki chegara eksklyuziv"
            }
          ]
        },
        {
          "question": "Orders jadvaldi 10 ta qatorgja, ularning 3 tasi NULL shipped_date ga. SELECT COUNT(*) FROM orders nima qaytaradi, va SELECT COUNT(shipped_date) FROM orders nima qaytaradi?",
          "options": [
            {
              "icon": "",
              "label": "10, keyin 10 — COUNT har doim qatorlarni NULL nisbatan saylab"
            },
            {
              "icon": "",
              "label": "7, keyin 7 — ikkala shakl NULL qatorlarni tashlab"
            },
            {
              "icon": "",
              "label": "10, keyin 7 — COUNT(*) har bir qatorno sanaydı, COUNT(column) faqat bu ustun NULL bo'lmagan qatorlarni sanaydı"
            },
            {
              "icon": "",
              "label": "10, keyin 3 — COUNT(column) faqat NULL qiymatlarni sanaydı"
            }
          ]
        },
        {
          "question": "SELECT name, salary FROM employees ORDER BY 2 DESC ishga tushirasiz. 2 nima bildiradi?",
          "options": [
            {
              "icon": "",
              "label": "Sintaksisning xatosi — ORDER BY faqat ustun nomlarini qabul qiladi, raqamlarni emas"
            },
            {
              "icon": "",
              "label": "Natija qatorining ikkinchisi"
            },
            {
              "icon": "",
              "label": "Bog'lanish o'rniga ishlatiluvchi 2 shartli qiymati"
            },
            {
              "icon": "",
              "label": "SELECT ro'yxatidagi ikkinchi ustun, salary — ORDER BY stenografiya sifatida ustunning pozitsiya raqamini qabul qiladi"
            }
          ]
        },
        {
          "question": "Standart SQL-da, 'Ana' || ' ' || 'Lee' nima baholanadi?",
          "options": [
            {
              "icon": "",
              "label": "Sintaksisning xatosi — SQL-ning birlashtirish operatori yo'q"
            },
            {
              "icon": "",
              "label": "3 — || mantiqiy OR bo'lib qatnashadi va sonni qaytaradi"
            },
            {
              "icon": "",
              "label": "'AnaLee' — || oramdarsiz birlashtiradi"
            },
            {
              "icon": "",
              "label": "'Ana Lee' — || standart SQL satr birlashtirish operatori"
            }
          ]
        },
        {
          "question": "Bu WHERE status IN ('open', 'pending', 'review') ga aynan ekvivalentmi?",
          "options": [
            {
              "icon": "",
              "label": "WHERE status = 'open' AND status = 'pending' AND status = 'review'"
            },
            {
              "icon": "",
              "label": "WHERE status != 'open' OR status != 'pending' OR status != 'review'"
            },
            {
              "icon": "",
              "label": "WHERE status = 'open' OR status = 'pending' OR status = 'review'"
            },
            {
              "icon": "",
              "label": "WHERE status LIKE 'open,pending,review'"
            }
          ]
        },
        {
          "question": "Customers 100 ta qatorgja; ularning 20 tasi hech qachon order qilmadi. SELECT c.id FROM customers c INNER JOIN orders o ON c.id = o.customer_id ishga tushirasiz. 20 ta order qilmagan mijozlar natijavga kiritilgan?",
          "options": [
            {
              "icon": "",
              "label": "Ha, har bitta o.id NULL bo'lib ko'rsatilgan"
            },
            {
              "icon": "",
              "label": "Ha, faqat agar ular WHERE klauzulasida ko'rinsa"
            },
            {
              "icon": "",
              "label": "Yoʻq — INNER JOIN faqat ikkala jadvalda mos keluvchi qatorlarni qaytaradi, shuning uchun nol order bo'lgan mijozlar butunlay olib tashlanadi"
            },
            {
              "icon": "",
              "label": "Ha, orders-dagi ustun boʻyicha nusxa olingan"
            }
          ]
        },
        {
          "question": "Har bir mijozi istasangiz, ulardan order bor yoki yo'q, shuning uchun SELECT c.id, o.total FROM customers c LEFT JOIN orders o ON c.id = o.customer_id WHERE o.total > 100 yozasiz. Bu hali nol order bo'lgan mijozlarni qaytaradimi?",
          "options": [
            {
              "icon": "",
              "label": "Yoʻq — WHERE klauzulasida o.total boʻyicha filtrlash LEFT JOIN qoʻyilgan NULL qatorlarni tashlab, INNER JOIN kabi ishlaydi"
            },
            {
              "icon": "",
              "label": "Ha — LEFT JOIN har doim customers-ning har bir qatorini saqlab, keyin nima kelmasa"
            },
            {
              "icon": "",
              "label": "Ha, o.total nol order bo'lgan mijozlar uchun 0 sifatida ko'rsatilgan"
            },
            {
              "icon": "",
              "label": "Yoʻq — LEFT JOIN o'zini-o'zi o'ng birlashtiri aylantiradi WHERE klauzulasi qoʻshilganda"
            }
          ]
        },
        {
          "question": "Employees jadvalida id ustuni va boshqa qator id-ga ko'rsatuvchi manager_id ustuni mavjud. Har bir xodim uning rahbari nomi bilan birga ro'yxatini chiqarish uchun jadvalni o'ziga birlashtira olasiz: SELECT e.name, m.name FROM employees e JOIN employees m ON e.manager_id = m.id. Bu naqsh nima deb ataladi?",
          "options": [
            {
              "icon": "",
              "label": "Kesma birlashtiri — har bir xodim har bir rahbar bilan mos keladi"
            },
            {
              "icon": "",
              "label": "Rekursiv birlashtiri — to'liq boshqarish zanjirini olib keladi"
            },
            {
              "icon": "",
              "label": "O'z-o'ziga birlashtiri — bir xil jadval ikki xil taxallus ishlatib o'ziga birlashtiradi"
            },
            {
              "icon": "",
              "label": "Bu SQL xatosi — jadval o'ziga birlashtirila olmaydi"
            }
          ]
        },
        {
          "question": "Ikki SELECT so'rovi bir xil ustunlar bilan UNION bilan birlashtiriladi. Agar ikkala so'rov bir xil qatorni qaytarsa, bu qator necha nusxa oxirgi natijavda ko'rinyapti?",
          "options": [
            {
              "icon": "",
              "label": "Bitta — UNION birlashtirilgan natijadagi nusxa qatorlarni olib tashlaydi; UNION ALL har ikkala nusxani saqlardi"
            },
            {
              "icon": "",
              "label": "Ikki — UNION ikkala so'rovning har bir qatorini saqlaydi"
            },
            {
              "icon": "",
              "label": "Nol — UNION ikkala so'rovda ko'rinadigan qatorni olib tashlaydi"
            },
            {
              "icon": "",
              "label": "Bu qatorni oldingi so'rov ro'yxatida turadigan joyiga bog'liq"
            }
          ]
        },
        {
          "question": "Sizes jadvaldi 3 ta qatorga, colors 4 ta qatorga. SELECT * FROM sizes CROSS JOIN colors necha qator qaytaradi?",
          "options": [
            {
              "icon": "",
              "label": "7 — CROSS JOIN qatorlarni sonini qo'shadi"
            },
            {
              "icon": "",
              "label": "12 — CROSS JOIN ikkala jadvaldan har bir qatorning har bir kombinatsiyasini qaytaradi (3 x 4)"
            },
            {
              "icon": "",
              "label": "3 — CROSS JOIN birinchi jadval bo'ylab bitta qatorni qaytaradi"
            },
            {
              "icon": "",
              "label": "0 — CROSS JOIN ON shartini talab qiladi yoki hech narsani qaytarmaydi"
            }
          ]
        },
        {
          "question": "Orders order #100 uchun 1 ta qatorga, order_items order #100 uchun 3 ta qatorga (har bir satrli element boʻylab). SELECT o.id, o.total FROM orders o JOIN order_items i ON o.id = i.order_id WHERE o.id = 100 ishga tushirasiz. Order #100 uchun qancha qator qaytaradi?",
          "options": [
            {
              "icon": "",
              "label": "3 — birlashtirish har bir mos order_items qatorini chiqaradi, shuning uchun order #100 bitta qatori satr element uchun takrorlandi"
            },
            {
              "icon": "",
              "label": "1 — orders faqat order #100 uchun bitta qatorga, shuning uchun birlashtirish ko'proq ishay olmaydi"
            },
            {
              "icon": "",
              "label": "4 — order uchun bitta qator va satr element uchun bitta"
            },
            {
              "icon": "",
              "label": "0 — bitta qator jadvalni uchta qator jadvali bilan bo'sh bo'lmagan kalit boʻyicha birlashtirish muvaffaq bo'lmaydi"
            }
          ]
        },
        {
          "question": "SELECT c.name, o.id FROM customers c RIGHT JOIN orders o ON c.id = o.customer_id quyidagi qaysi bilan bir xil qatorlarni qaytaradi?",
          "options": [
            {
              "icon": "",
              "label": "SELECT c.name, o.id FROM customers c INNER JOIN orders o ON c.id = o.customer_id"
            },
            {
              "icon": "",
              "label": "SELECT c.name, o.id FROM orders o LEFT JOIN customers c ON c.id = o.customer_id — jadvalni o'rnini almashtirish va RIGHT JOIN o'rniga LEFT JOIN ishlatish ekvivalent"
            },
            {
              "icon": "",
              "label": "SELECT c.name, o.id FROM customers c LEFT JOIN orders o ON c.id = o.customer_id"
            },
            {
              "icon": "",
              "label": "SELECT c.name, o.id FROM orders o CROSS JOIN customers c"
            }
          ]
        },
        {
          "question": "Standart SQL-da, SELECT department, name, AVG(salary) FROM employees GROUP BY department ishga tushirasiz. Bu haqiqiy so'rovmi?",
          "options": [
            {
              "icon": "",
              "label": "Ha — GROUP BY faqat department kiritish kerak, chunki u birinchi"
            },
            {
              "icon": "",
              "label": "Yoʻq — name tanlangan lekin ham agregat qilingan va ham GROUP BY ro'yxatga kiritilmagan, va standart SQL har bir agregat qilinmagan tanlangan ustunning GROUP BY klauzulasida bo'lishini talab qiladi"
            },
            {
              "icon": "",
              "label": "Ha — SQL avtomatik bitta ixtiyoriy name-ni department uchun tanlab oladi"
            },
            {
              "icon": "",
              "label": "Yoʻq — AVG() GROUP BY bilan bir xil so'rovda birlashtirilishi mumkin emas"
            }
          ]
        },
        {
          "question": "O'rtacha maoshi 80000 dan oshib ketgan departamentlarni istaysiz. Guruhlashdan keyin AVG(salary) kabi agregat qiymat bo'yicha qaysi klauza filtrlaydi — WHERE yoki HAVING?",
          "options": [
            {
              "icon": "",
              "label": "WHERE — HAVING faqat UNION so'rovlar bilan ishlatiladi"
            },
            {
              "icon": "",
              "label": "Har biri agregat funksiyalar bilan bir xil ishlaydi"
            },
            {
              "icon": "",
              "label": "Hech biri — agregat filtrlash kichik so'rovni talab qiladi"
            },
            {
              "icon": "",
              "label": "HAVING — WHERE grouping sodir bo'lishdan oldin individual qatorlarni filtrlaydi, HAVING agregatsiyadan keyin guruhlarni filtrlaydi"
            }
          ]
        },
        {
          "question": "SELECT salary * 1.1 AS new_salary FROM employees WHERE new_salary > 50000 yozasiz. Bu ishlaydi?",
          "options": [
            {
              "icon": "",
              "label": "Ha — SELECT-da aniqlangan taxalluslar har doim bir xil so'rovda WHERE uchun mavjud"
            },
            {
              "icon": "",
              "label": "Ha, faqat raqamli taxalluslar uchun"
            },
            {
              "icon": "",
              "label": "Yoʻq — AS WHERE-ga filtrlangan so'rovda ishlatilmaydi"
            },
            {
              "icon": "",
              "label": "Yoʻq — WHERE SELECT new_salary taxallusi tayinlagandan oldin baholanadi, shuning uchun taxallus bu nuqtada mavjud emas"
            }
          ]
        },
        {
          "question": "SELECT name FROM employees e WHERE salary > (SELECT AVG(salary) FROM employees WHERE department = e.department). Nima uchun bu korrelativ kichik so'rov deb ataladi?",
          "options": [
            {
              "icon": "",
              "label": "Chunki u JOIN o'rniga WHERE klauzulasini ishlatadi"
            },
            {
              "icon": "",
              "label": "Ichki kichik so'rov tashqi so'rovdan e.department-ni ko'rib, shuning uchun u tashqi so'rov qidiradigan har bir qator uchun qayta baholanishi kerak"
            },
            {
              "icon": "",
              "label": "Chunki u bittadan ortiq ustun qaytaradi"
            },
            {
              "icon": "",
              "label": "Chunki u tashqi so'rov boshlanishidan oldin aynan bir marta ishlaydi"
            }
          ]
        },
        {
          "question": "Kichik so'rov SELECT manager_id FROM employees ba'zi NULL qiymatlar bilan birga haqiqiy id-larni qaytaradi. SELECT name FROM employees WHERE id NOT IN (SELECT manager_id FROM employees) ishga tushirasiz. Nima bo'ladi?",
          "options": [
            {
              "icon": "",
              "label": "Bu rahbar bo'lmagan har bir xodimni qaytaradi, NULL larni e'tiborsiz qoldiradi"
            },
            {
              "icon": "",
              "label": "Bu nol qatorlarni qaytaradi — NOT IN ro'yxatidagi bitta NULL har bir taqqoslashni UNKNOWN qiladi, shuning uchun hech qator shart qanday bo'lmasa"
            },
            {
              "icon": "",
              "label": "Bu xato ko'taraydi, chunki NOT IN kichik so'rovlar bilan ishlatilmaydi"
            },
            {
              "icon": "",
              "label": "Bu har bir xodimni qaytaradi, chunki NULL istiqlolik sifatida qaraladi"
            }
          ]
        },
        {
          "question": "SELECT name FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id). Bu nima qaytaradi?",
          "options": [
            {
              "icon": "",
              "label": "Orders jadvalida kamida bitta qatorga ega bo'lgan har bir mijoz — EXISTS faqat kichik so'rov qator qaytaradimi yo'qmi shuni tekshiradi, ularning qiymatlarini emas"
            },
            {
              "icon": "",
              "label": "Har bir mijoz, chunki SELECT 1 har doim to'g'ri qaytaradi"
            },
            {
              "icon": "",
              "label": "Xato, chunki kichik so'rov ustun nomi o'rniga raqamni tanlaydi"
            },
            {
              "icon": "",
              "label": "Faqat aynan bitta order bo'lgan mijozlar"
            }
          ]
        },
        {
          "question": "SELECT name, (SELECT order_id FROM orders WHERE customer_id = c.id) AS last_order FROM customers c yozasiz, va berilgan mijozda orders da 3 ta qator. Bu so'rov ishga tushganda nima bo'ladi?",
          "options": [
            {
              "icon": "",
              "label": "Bu birinchi mos order_id qaytaradi va qolgan ikkitasini sukutda e'tiborsiz qoldiradi"
            },
            {
              "icon": "",
              "label": "Bu vergul ajratilgan barcha uchta order_id ro'yxatini qaytaradi"
            },
            {
              "icon": "",
              "label": "Bu 3 ta qatorni bu mijoz uchun qaytaradi, order uchun bitta"
            },
            {
              "icon": "",
              "label": "Bu runtime xatosini ko'taraydi — SELECT ro'yxatidagi scalar kichik so'rov ko'pi bilan bitta qatorni qaytarishi kerak, va bu uchta qaytaradi"
            }
          ]
        },
        {
          "question": "To'rtta qator eng yuqori reytingiga bog'lanadi. RANK() ORDER BY score DESC ishlatib, barchasi 1 ni oladi. Keying qator qanday reytingga?",
          "options": [
            {
              "icon": "",
              "label": "5 — RANK() bog'lanish teng bo'lgan qatorlar soniga teng bo'shlikni qoldiradi"
            },
            {
              "icon": "",
              "label": "2 — RANK() har doim bog'lanishdan keyin aynan bitta ko'paytiradi"
            },
            {
              "icon": "",
              "label": "1 — har bir qolgan qator ham 1 ni oladi"
            },
            {
              "icon": "",
              "label": "4 — RANK() bog'lanish sonidan hesoblashni boshlab"
            }
          ]
        },
        {
          "question": "To'rtta qator eng yuqori reytingiga bog'lanadi. DENSE_RANK() ORDER BY score DESC ishlatib, barchasi 1 ni oladi. Keying qator qanday reytingga?",
          "options": [
            {
              "icon": "",
              "label": "5 — DENSE_RANK() aynan RANK() kabi ishlaydi"
            },
            {
              "icon": "",
              "label": "1 — DENSE_RANK() har bir qolgan qatorga bir xil reytingni tayinlaydi"
            },
            {
              "icon": "",
              "label": "2 — DENSE_RANK() hech qachon bo'shlik qoldirmaydi, shuning uchun keying xilma-xil qiymat har doim keying kesma reytingni oladi"
            },
            {
              "icon": "",
              "label": "3 — DENSE_RANK() bog'lanish guruhi uchun bitta reytingni o'tkazib"
            }
          ]
        },
        {
          "question": "SUM(amount) OVER (PARTITION BY region ORDER BY amount) so'rovga qoʻshiladi. PARTITION BY region bu yerda nima qiladi?",
          "options": [
            {
              "icon": "",
              "label": "Bu butun natija to'plami boʻylab to'plashni oʻrniga, har bir hudud uchun alohida ishchi sum-ni qayta boshlab turadi"
            },
            {
              "icon": "",
              "label": "Bu natijalarni bitta hududga filtrlaydi"
            },
            {
              "icon": "",
              "label": "Bu qatorlarni har bir hudud uchun bitta qatorra guruhlash va sunʼiy to'plash, GROUP BY kabi"
            },
            {
              "icon": "",
              "label": "Bu summashdan oldin hududi alifbo tartibida tartiblaydi"
            }
          ]
        },
        {
          "question": "ROW_NUMBER() OVER (ORDER BY score DESC) beshta qatorga tatbiq qilinadi, ulardan ikkitasi aynan bo'lgan reytingga bo'lanadi. Ikki qator hech qachon bir xil qatorlar raqamini ola oladimi?",
          "options": [
            {
              "icon": "",
              "label": "Ha — bog'lanish qatorlari har doim bir xil qator raqamini ulashadi"
            },
            {
              "icon": "",
              "label": "Faqat PARTITION BY ham ishlatilsa"
            },
            {
              "icon": "",
              "label": "Bu bog'lanish birinchi yoki oxirgi pozitsiyada bo'lishiga bog'liq"
            },
            {
              "icon": "",
              "label": "Yoʻq — ROW_NUMBER() har doim har bir qatorga noyob, qat'iy ortib ketuvchi butun sonni tayinlaydi, hatta qiymatlar bog'langanida"
            }
          ]
        },
        {
          "question": "WITH high_earners AS (SELECT * FROM employees WHERE salary > 100000) SELECT department, COUNT(*) FROM high_earners GROUP BY department. High_earners nima?",
          "options": [
            {
              "icon": "",
              "label": "Umumiy jadval ifodasi (CTE) — jadvaldek so'rovning qolgan qismi tamonidan ko'riladigan nomlangan, vaqtincha natija to'plami"
            },
            {
              "icon": "",
              "label": "Ma'lumotlar bazasida yaratilgan doimiy jadval"
            },
            {
              "icon": "",
              "label": "So'rov tugagandan keyin saqlanib qolgan ko'rinish"
            },
            {
              "icon": "",
              "label": "Alohida chaqirilishi kerak bo'lgan saqlab qolish protsedurasi"
            }
          ]
        },
        {
          "question": "Ustun PRIMARY KEY sifatida e'lon qilingan. Siz bu ustun NULL bo'lgan qator kirita oladimi?",
          "options": [
            {
              "icon": "",
              "label": "Ha — PRIMARY KEY faqat noyoblikni amalga oshiradi, NULL-likni emas"
            },
            {
              "icon": "",
              "label": "Ha, faqat bitta NULL qator ruxsat etiladi, UNIQUE cheklov kabi"
            },
            {
              "icon": "",
              "label": "Yoʻq — PRIMARY KEY ustun boshida NOT NULL, shuning uchun NULL kiritish rad etiladi"
            },
            {
              "icon": "",
              "label": "Bu ustun standart qiymatga ega bo'lishiga bog'liq"
            }
          ]
        },
        {
          "question": "Ochiq tranzaksiya ichida siz UPDATE ishga tushirasiz lekin hali COMMIT ishga tushirmadingiz. Boshqa, alohida ma'lumotlar bazasi ulanishidan bu update ko'rinyapti?",
          "options": [
            {
              "icon": "",
              "label": "Ha — barcha ulanishlar har bir yozishni darhol ko'radi"
            },
            {
              "icon": "",
              "label": "Ha, faqat ikkinchi ulanish ham tranzaksiyani ochsa"
            },
            {
              "icon": "",
              "label": "Bu faqat qaysi jadval yangilangani-ga bog'liq"
            },
            {
              "icon": "",
              "label": "Yoʻq — komitlash qilinmagan o'zgarish faqat uni qilgan tranzaksiya ichida ko'rinadi, COMMIT undan boshqalarga ko'rinadi va davamlilashadi"
            }
          ]
        },
        {
          "question": "Products.category_id categories.id ga ko'rsatuvchi FOREIGN KEY chekloviga ega. Categories qatorini unga ko'rsatuvchi mahsulotlar bilan o'chirishga harakat qilasiz, ON DELETE qoidasi aniqlanmagan. Nima bo'ladi?",
          "options": [
            {
              "icon": "",
              "label": "Categories qatori o'chiriladi va mos keladigan products.category_id qiymatlari avtomatik NULL ga o'rnatiladi"
            },
            {
              "icon": "",
              "label": "Categories qatori o'chiriladi va unga ko'rsatuvchi har bir mahsulot ham o'chiriladi"
            },
            {
              "icon": "",
              "label": "DELETE rad etiladi — standart xorijiy kalit xulosi bog'lanish qatorlari hali ko'rsatganligi sababli cited qatorni o'chirishni to'saddi"
            },
            {
              "icon": "",
              "label": "DELETE muvaffaqiyatli bo'ladi, products 'category_id endi mavjud bo'lmagan kategoriyaga ko'rsatib"
            }
          ]
        }
      ],
      "optionOrderVersion": "e0466e547cfd8a45"
    }
  }
}
