{
  "assessmentTests": {
    "sql_test": {
      "name": "Tes SQL",
      "desc": "30 pitakonan skenario babagan panyaringan, join, agregasi, subquery lan window function — priksa punapa kaprigelan SQL panjenengan cocog kaliyan maksud kamahiran SQL ing iklan lowongan pagawean.",
      "recommendation": "Profil kaprigelan SQL panjenengan",
      "results": {
        "beginner": {
          "name": "Pemula",
          "desc": "Panjenengan saged nyerat statement SELECT ingkang mlampah lan nyaring kanthi sawetara kondhisi, nanging pitakonan ingkang boten leres panjenengan wangsuli kathah ngumpul ing seputar penanganan NULL lan cara kerja join, sanès sintaksis — mbandhingaké kolom kaliyan NULL migunakaké =, punapa ingkang sejatosipun dipunreksa dening LEFT JOIN, kados pundi wates BETWEEN makarya. Sakabèhing punika boten ateges panjenengan boten ahli babagan database; punika aturan-aturan khusus ingkang ndadosaké kesandhung tiyang ingkang sinau SQL kanthi coba-coba, sanès saking standar. Aturan-aturan punika wigati ing pagawean amargi saben satunggalipun dados papan query mbalèkaké cacahing baris ingkang katingalipun lumrah nanging lepat.",
          "recommendation": "Wiwiti saking tiga prakawis, miturut urutan punika: kenging punapa WHERE col = NULL boten nate cocog kaliyan punapa kemawon (lan IS NULL kedah dipunginakaké), kados pundi INNER JOIN mbuwang baris ingkang boten wonten pasanganipun dene LEFT JOIN njagi baris-baris punika, lan wates pasti ingkang kalebet ing BETWEEN. Tutorial SQL saking Mode Analytics lan dokumentasi PostgreSQL sami ngrembag katiga-tiganipun kanthi conto ingkang saged dipunjalanaké."
        },
        "intermediate": {
          "name": "Menengah",
          "desc": "Panjenengan nangani query laporan saben dinten kanthi lancar — join, GROUP BY, panyaringan ingkang prasaja — lan boten badhé kalambatan dening pakaryan dashboard utawi analisis ad-hoc ingkang rutin. Bédanipun saking tingkat punika dumugi tingkat Lanjut kathah gumantung ing punapa ingkang kedadosan manawi klausa-klausa saling pengaruh: klausa WHERE ing tabel ingkang dipun-join kanthi jempling ngowahi LEFT JOIN dados INNER JOIN malih, join ingkang ngglelebaraké cacahing baris sadèréngipun agregat dipunetrapaké, NOT IN ingkang kanthi jempling boten mbalèkaké punapa-punapa amargi satunggal NULL kesasar mlebet ing subquery. Punika jinis bug ingkang lolos saking pamriksan sepintas lan mentas katingal manawi wonten ingkang mbandhingaké total kaliyan laporan sanès.",
          "recommendation": "Fokus ing kados pundi klausa-klausa saling pengaruh, tinimbang punapa ingkang dipuntindakaké saben klausa piyambak: panyaringan WHERE ing kolom sisih tengen LEFT JOIN, perkalian baris saking join one-to-many sadèréng panjenengan nindakaké agregasi, lan kenging punapa NOT IN rusak manawi wonten NULL (EXISTS lumrahipun boten). Salajengipun HAVING vs WHERE, amargi pambédan punika ndadosaké kesandhung tiyang ingkang sampun mangertos kalih klausa punika kanthi piyambak-piyambak."
        },
        "advanced": {
          "name": "Lanjutan",
          "desc": "Punika tingkat ingkang paling kerep dipunmaksud lowongan pagawean kanthi “SQL ingkang kuwat.” Panjenengan maos query multi-join lan saged ngira-ira cacahing barisipun sadèréngipun dipunjalanaké, panjenengan mangertos kenging punapa asil query ewah, boten mung bilih asilipun ewah, lan panjenengan milih CTE utawi window function tinimbang subquery ingkang mapan ing njeroning query manawi punika piranti ingkang langkung cetha. Ingkang misahaké tataran punika saking tataran paling inggil inggih punika sisih pangayoman ing pagawean: mangertos fungsi ranking pundi ingkang dipunginakaké manawi wonten asil ingkang sami, punapa ingkang dipunpisahaké transaksi saking sesi ingkang mlampah bebarengan, lan punapa ingkang sejatosipun dipuntindakaké aturan ON DELETE ingkang boten wonten ing tingkat database.",
          "recommendation": "Dalami bagéan-bagéan ingkang njagi data ingkang ugi dipunsentuh tiyang sanès: bédanipun RANK, DENSE_RANK lan ROW_NUMBER manawi wonten asil ingkang sami, punapa ingkang sejatosipun dipundadosaké katingal dening COMMIT lan kangge sinten, lan cara makarya foreign key nalika DELETE. Gunakaké ulasan jero saking newsletter The Index utawi SQL for Devs bab window function lan isolasi transaksi minangka langkah candhakipun kanggé kalih-kalihipun."
        },
        "expert": {
          "name": "Ahli",
          "desc": "Skor panjenengan paling inggil ing saben bagéan — panyaringan lan semantik NULL, join lan operasi himpunan, agregasi lan subquery, saha window function, CTE lan constraint. Kanthi praktis, punika ateges panjenengan saged dipunparingi query laporan multi-join kagunganipun tiyang sanès lan njlentrehaké kenging punapa query punika mbalèkaké cacahing baris kados mekaten, boten mung punapa ingkang dipunsebataken sintaksis kedah dipuntindakaké, ingkang minangka kaprigelan ingkang langkung awrat lan langkung ageng nilainipun. Ing tingkat punika basa query arang dados faktor pambatesan; watesipun lumrahipun dumunung ing desain skema utawi ukuran data ing ngandhapipun.",
          "recommendation": "Bathi samenika wonten ing rencana eksekusi lan desain: maos output EXPLAIN sadèréng nganggep query punika alon, strategi indexing minangka timbang-timbangan marang biaya panulisan, sanès kauntungan gratis, lan kaputusan normalisasi ingkang tetep kuwat nalika skema tuwuh ageng. Manawi panjenengan dipunseleksi kanggé satunggaling peran, jlentrehaké bug query kados join fan-out utawi jebakan NOT IN/NULL ingkang panjenengan temokaké ing production tinimbang mung nyebataken fitur SQL — punika nuduhaké nalar, sanès mung kosakata."
        }
      },
      "questions": [
        {
          "question": "Satunggal tabel gadhah kolom age ingkang saged NULL. Panjenengan njalanaké SELECT * FROM users WHERE age = NULL. Pinten baris ingkang dipunmbalèkaké, senajan sawetara baris gadhah age ingkang dipunsetel dados NULL?",
          "options": [
            {
              "icon": "",
              "label": "Saben baris ingkang age-ipun NULL"
            },
            {
              "icon": "",
              "label": "Nol baris"
            },
            {
              "icon": "",
              "label": "Satunggal error"
            },
            {
              "icon": "",
              "label": "Sadaya baris"
            }
          ]
        },
        {
          "question": "Panjenengan njalanaké SELECT DISTINCT department, role FROM employees. DISTINCT mbuwang duplikat saking punapa?",
          "options": [
            {
              "icon": "",
              "label": "Saben kombinasi department lan role"
            },
            {
              "icon": "",
              "label": "Mung nilai department ingkang duplikat"
            },
            {
              "icon": "",
              "label": "Mung nilai role ingkang duplikat"
            },
            {
              "icon": "",
              "label": "Boten wonten; DISTINCT mung makarya ing satunggal kolom"
            }
          ]
        },
        {
          "question": "Kolom name dipunsaring kaliyan WHERE name LIKE 'A_'. Nilai pundi ingkang cocog: 'A', 'Al', 'Ana', 'Ally'?",
          "options": [
            {
              "icon": "",
              "label": "'A'"
            },
            {
              "icon": "",
              "label": "'Al'"
            },
            {
              "icon": "",
              "label": "'Ana' lan 'Ally'"
            },
            {
              "icon": "",
              "label": "Sadaya patang nilai"
            }
          ]
        },
        {
          "question": "Kolom price disaring nganggo WHERE price BETWEEN 10 AND 20. Apa baris kanthi price persis 10 utawa persis 20 uga kalebu?",
          "options": [
            {
              "icon": "",
              "label": "Ora, loro-loroné ora kalebu"
            },
            {
              "icon": "",
              "label": "Ya, loro-loroné kalebu"
            },
            {
              "icon": "",
              "label": "Mung price = 10"
            },
            {
              "icon": "",
              "label": "Mung price = 20"
            }
          ]
        },
        {
          "question": "Tabel orders isiné 10 baris, lan 3 baris ing antarané nduwé shipped_date NULL. SELECT COUNT(*) FROM orders ngasilaké apa, lan SELECT COUNT(shipped_date) FROM orders ngasilaké apa?",
          "options": [
            {
              "icon": "",
              "label": "10, banjur 10"
            },
            {
              "icon": "",
              "label": "7, banjur 7"
            },
            {
              "icon": "",
              "label": "10, banjur 7"
            },
            {
              "icon": "",
              "label": "10, banjur 3"
            }
          ]
        },
        {
          "question": "Panjenengan nglakokaké SELECT name, salary FROM employees ORDER BY 2 DESC. Angka 2 nuduhaké apa?",
          "options": [
            {
              "icon": "",
              "label": "Kasalahan sintaks"
            },
            {
              "icon": "",
              "label": "Baris kaping kalih saka asil"
            },
            {
              "icon": "",
              "label": "Nilai literal 2, kanggo mutusaké nalika asilé padha"
            },
            {
              "icon": "",
              "label": "Kolom kaping kalih ing dhaftar SELECT, yaiku salary"
            }
          ]
        },
        {
          "question": "Ing SQL standar, 'Ana' || ' ' || 'Lee' ngasilaké apa?",
          "options": [
            {
              "icon": "",
              "label": "Kasalahan sintaks"
            },
            {
              "icon": "",
              "label": "TRUE"
            },
            {
              "icon": "",
              "label": "'AnaLee'"
            },
            {
              "icon": "",
              "label": "'Ana Lee'"
            }
          ]
        },
        {
          "question": "Endi sing persis padha karo WHERE status IN ('open', 'pending', 'review')?",
          "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 isiné 100 baris; 20 ing antarané durung tau nggawé pesenan. Panjenengan nglakokaké SELECT c.id FROM customers c INNER JOIN orders o ON c.id = o.customer_id. Apa 20 pelanggan sing ora nduwé pesenan katon ing asil?",
          "options": [
            {
              "icon": "",
              "label": "Ya, sapisan-sapisan, kanthi o.id katon minangka NULL"
            },
            {
              "icon": "",
              "label": "Ya, nanging mung yèn uga ana ing klausa WHERE"
            },
            {
              "icon": "",
              "label": "No"
            },
            {
              "icon": "",
              "label": "Ya, dibaleni sapisan saben kolom ing orders"
            }
          ]
        },
        {
          "question": "Panjenengan péngin kabèh pelanggan, nduwé pesenan utawa ora, mula panjenengan nulis SELECT c.id, o.total FROM customers c LEFT JOIN orders o ON c.id = o.customer_id WHERE o.total > 100. Apa query punika isih ngasilaké pelanggan sing pesenané nol?",
          "options": [
            {
              "icon": "",
              "label": "Ora, tumindaké kaya INNER JOIN"
            },
            {
              "icon": "",
              "label": "Ya, LEFT JOIN njaga kabèh pelanggan"
            },
            {
              "icon": "",
              "label": "Ya, kanthi o.total katon minangka 0"
            },
            {
              "icon": "",
              "label": "Ora, tumindaké kaya RIGHT JOIN"
            }
          ]
        },
        {
          "question": "Tabel employees nduwé kolom id lan kolom manager_id sing nuding id ing baris liyané. Kanggo nampilaké saben karyawan bebarengan karo jeneng manajeré, panjenengan nggabungaké tabel karo tabel sing padha: SELECT e.name, m.name FROM employees e JOIN employees m ON e.manager_id = m.id. Pola punika diarani apa?",
          "options": [
            {
              "icon": "",
              "label": "Cross join"
            },
            {
              "icon": "",
              "label": "Join rekursif"
            },
            {
              "icon": "",
              "label": "Self-join"
            },
            {
              "icon": "",
              "label": "Query sing ora valid"
            }
          ]
        },
        {
          "question": "Rong query SELECT kanthi kolom sing padha digabung nganggo UNION. Yèn rong query kasebut ngasilaké baris sing persis padha, pira salinan baris kasebut sing katon ing asil pungkasan?",
          "options": [
            {
              "icon": "",
              "label": "Siji salinan"
            },
            {
              "icon": "",
              "label": "Rong salinan"
            },
            {
              "icon": "",
              "label": "Ora ana salinan"
            },
            {
              "icon": "",
              "label": "Gumantung query endi sing nyebutaké baris kasebut luwih dhisik"
            }
          ]
        },
        {
          "question": "Tabel sizes isiné 3 baris lan colors isiné 4 baris. SELECT * FROM sizes CROSS JOIN colors ngasilaké pira baris?",
          "options": [
            {
              "icon": "",
              "label": "7"
            },
            {
              "icon": "",
              "label": "12"
            },
            {
              "icon": "",
              "label": "3"
            },
            {
              "icon": "",
              "label": "0"
            }
          ]
        },
        {
          "question": "orders nduwé 1 baris kanggo pesenan #100, lan order_items nduwé 3 baris kanggo pesenan #100 (siji saben item pesenan). Panjenengan nglakokaké SELECT o.id, o.total FROM orders o JOIN order_items i ON o.id = i.order_id WHERE o.id = 100. Pira baris sing metu kanggo pesenan #100?",
          "options": [
            {
              "icon": "",
              "label": "3"
            },
            {
              "icon": "",
              "label": "1"
            },
            {
              "icon": "",
              "label": "4"
            },
            {
              "icon": "",
              "label": "0"
            }
          ]
        },
        {
          "question": "SELECT c.name, o.id FROM customers c RIGHT JOIN orders o ON c.id = o.customer_id ngasilaké baris sing padha karo endi saka pilihan punika?",
          "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"
            },
            {
              "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": "Ing SQL standar, panjenengan nglakokaké SELECT department, name, AVG(salary) FROM employees GROUP BY department. Apa query punika valid?",
          "options": [
            {
              "icon": "",
              "label": "Ya, nglompokaké miturut department wis cukup"
            },
            {
              "icon": "",
              "label": "Ora, name kudu diagregasi utawa ana ing GROUP BY"
            },
            {
              "icon": "",
              "label": "Ya, SQL milih siji name saben department"
            },
            {
              "icon": "",
              "label": "Ora, AVG() ora bisa dienggo karo GROUP BY"
            }
          ]
        },
        {
          "question": "Panjenengan péngin departemen sing rata-rata gajiné ngluwihi 80000. Klausa endi sing nyaring nilai agregat kaya AVG(salary) sawisé data dikelompokaké — WHERE utawa HAVING?",
          "options": [
            {
              "icon": "",
              "label": "WHERE"
            },
            {
              "icon": "",
              "label": "Salah siji"
            },
            {
              "icon": "",
              "label": "Ora loro-loroné; perlu subquery"
            },
            {
              "icon": "",
              "label": "HAVING"
            }
          ]
        },
        {
          "question": "Panjenengan nulis SELECT salary * 1.1 AS new_salary FROM employees WHERE new_salary > 50000. Apa query punika bisa mlaku?",
          "options": [
            {
              "icon": "",
              "label": "Ya, WHERE bisa nganggo alias SELECT"
            },
            {
              "icon": "",
              "label": "Ya, nanging mung kanggo alias numerik"
            },
            {
              "icon": "",
              "label": "Ora, AS ora diparengaké ing query sing disaring"
            },
            {
              "icon": "",
              "label": "Ora, WHERE mlaku sadurungé alias ana"
            }
          ]
        },
        {
          "question": "SELECT name FROM employees e WHERE salary > (SELECT AVG(salary) FROM employees WHERE department = e.department). Yagéné query punika diarani subquery korelasi?",
          "options": [
            {
              "icon": "",
              "label": "Nganggo JOIN, dudu klausa WHERE"
            },
            {
              "icon": "",
              "label": "Nganggo e.department saka query njaba"
            },
            {
              "icon": "",
              "label": "Ngasilaké luwih saka siji kolom"
            },
            {
              "icon": "",
              "label": "Mlaku sapisan sadurungé query njaba diwiwiti"
            }
          ]
        },
        {
          "question": "Subquery SELECT manager_id saka tabel employees ngasilaké sawetara nilai NULL bebarengan karo id nyata. Panjenengan nglakokaké SELECT name saka tabel employees ing ngendi id ora kalebu ing asil subquery mau. Apa sing kelakon?",
          "options": [
            {
              "icon": "",
              "label": "Ngasilaké saben non-manajer, ora nggatèkaké NULL"
            },
            {
              "icon": "",
              "label": "Ngasilaké nol baris"
            },
            {
              "icon": "",
              "label": "Nuwuhaké error"
            },
            {
              "icon": "",
              "label": "Ngasilaké saben karyawan"
            }
          ]
        },
        {
          "question": "SELECT name FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id). Query punika ngasilaké apa?",
          "options": [
            {
              "icon": "",
              "label": "Saben pelanggan sing nduwé paling ora siji pesenan"
            },
            {
              "icon": "",
              "label": "Saben pelanggan"
            },
            {
              "icon": "",
              "label": "Satunggal error"
            },
            {
              "icon": "",
              "label": "Mung pelanggan sing nduwé persis siji pesenan"
            }
          ]
        },
        {
          "question": "Panjenengan nulis SELECT name, (SELECT order_id FROM orders WHERE customer_id = c.id) AS last_order FROM customers c, lan ana pelanggan sing nduwé 3 baris ing orders. Apa sing kedadéan nalika query punika dilakokaké?",
          "options": [
            {
              "icon": "",
              "label": "Mung ngasilaké sing pisanan"
            },
            {
              "icon": "",
              "label": "Ngasilaké dhaptar telu-telune sing dipisah koma"
            },
            {
              "icon": "",
              "label": "Ngasilaké 3 baris"
            },
            {
              "icon": "",
              "label": "Nuwuhaké kasalahan nalika dilakokaké"
            }
          ]
        },
        {
          "question": "Papat baris seri kanggo skor paling dhuwur. Nganggo RANK() ORDER BY score DESC, papat-patané olèh rank 1. Baris sabanjuré ing ngisor olèh rank pira?",
          "options": [
            {
              "icon": "",
              "label": "5"
            },
            {
              "icon": "",
              "label": "2"
            },
            {
              "icon": "",
              "label": "1"
            },
            {
              "icon": "",
              "label": "4"
            }
          ]
        },
        {
          "question": "Papat baris seri kanggo skor paling dhuwur. Nganggo DENSE_RANK() ORDER BY score DESC, papat-patané olèh rank 1. Baris sabanjuré ing ngisor olèh rank pira?",
          "options": [
            {
              "icon": "",
              "label": "5"
            },
            {
              "icon": "",
              "label": "1"
            },
            {
              "icon": "",
              "label": "2"
            },
            {
              "icon": "",
              "label": "3"
            }
          ]
        },
        {
          "question": "SUM(amount) OVER (PARTITION BY region ORDER BY amount) ditambahaké ing sawijining query. Apa sing ditindakaké PARTITION BY region ing kéné?",
          "options": [
            {
              "icon": "",
              "label": "Miwiti manèh jumlah kumulatif kanggo saben region"
            },
            {
              "icon": "",
              "label": "Nyaring asil dadi mung siji region"
            },
            {
              "icon": "",
              "label": "Nggabung baris dadi siji kanggo saben region"
            },
            {
              "icon": "",
              "label": "Ngurutaké region miturut abjad"
            }
          ]
        },
        {
          "question": "ROW_NUMBER() OVER (ORDER BY score DESC) ditrapaké ing limang baris, rong baris ing antarané persis seri skoré. Apa rong baris bisa olèh nomer baris sing padha?",
          "options": [
            {
              "icon": "",
              "label": "Inggih"
            },
            {
              "icon": "",
              "label": "Mung yèn PARTITION BY uga dienggo"
            },
            {
              "icon": "",
              "label": "Gumantung ing endi seriné ana"
            },
            {
              "icon": "",
              "label": "No"
            }
          ]
        },
        {
          "question": "Pitakon sing diwiwiti nganggo high_earners minangka (SELECT * saka employees ing ngendi salary > 100000) banjur SELECT department, COUNT(*) saka high_earners GROUP BY department. Apa high_earners punika?",
          "options": [
            {
              "icon": "",
              "label": "Ekspresi tabel umum (CTE)"
            },
            {
              "icon": "",
              "label": "Tabel permanen ing database"
            },
            {
              "icon": "",
              "label": "View sing tetep ana sawisé query"
            },
            {
              "icon": "",
              "label": "Stored procedure"
            }
          ]
        },
        {
          "question": "Sawijining kolom dideklarasiaké minangka PRIMARY KEY. Apa panjenengan bisa nglebokaké baris sing kolom kasebut NULL?",
          "options": [
            {
              "icon": "",
              "label": "Inggih"
            },
            {
              "icon": "",
              "label": "Ya, nanging mung siji baris NULL"
            },
            {
              "icon": "",
              "label": "No"
            },
            {
              "icon": "",
              "label": "Gumantung saka nilai default kolom"
            }
          ]
        },
        {
          "question": "Ing sajroning transaksi sing isih mbukak, panjenengan nglakokaké UPDATE nanging durung nglakokaké COMMIT. Saka sambungan kapindho sing kapisah menyang database, apa update punika katon?",
          "options": [
            {
              "icon": "",
              "label": "Ya, langsung"
            },
            {
              "icon": "",
              "label": "Mung yen sambungan kapindho mbukak transaksi"
            },
            {
              "icon": "",
              "label": "Gumantung tabel endi sing diowahi"
            },
            {
              "icon": "",
              "label": "Ora, nganti wis di-commit"
            }
          ]
        },
        {
          "question": "products.category_id nduwé constraint FOREIGN KEY sing nuding menyang categories.id. Panjenengan nyoba DELETE sawijining baris saka categories sing isih ana products sing nuding marang baris kasebut, tanpa aturan ON DELETE sing ditetepaké. Apa sing kedadéan?",
          "options": [
            {
              "icon": "",
              "label": "category_id saka products diset dadi NULL"
            },
            {
              "icon": "",
              "label": "Products sing nuding kasebut uga dibusak"
            },
            {
              "icon": "",
              "label": "DELETE ditolak"
            },
            {
              "icon": "",
              "label": "DELETE kasil, nanging ninggal referensi sing nggantung"
            }
          ]
        }
      ],
      "optionOrderVersion": "f9e1314f9ea2bea2"
    }
  },
  "testNames": {
    "sql-test": "Tes SQL"
  }
}
