023. JSON va JSONB
Bu mavzuda operatorlar, agregatlar va yo'l so'rovlari bo'yicha 41 ta masala bor. Har bir masala oldida qavs ichida sxema nomi va qiyinlik darajasi ko'rsatilgan. Sxemalar Sxemalar va tayyorlov sahifasida berilgan.
Masalani o'zingiz yechib, natijani Kutilgan natija bilan solishtiring. O'zgartiruvchi masalalarda (INSERT, UPDATE, DELETE, DDL) natija shartda aytilgan tekshiruv so'rovidan olingan. Natija 10 qatordan ko'p bo'lsa, birinchi 10 qator ko'rsatilgan.
1. (dokon, oson) '{"ism":"Ali","yosh":25}' JSONB dan 'ism' maydonini -> operatori bilan chiqaring.
2. (dokon, oson) Xuddi shu JSONB dan 'ism' ni matn sifatida ->> bilan chiqaring.
3. (dokon, oson) 'yosh' maydonini butun songa aylantirib 5 qo'shing.
4. (dokon, oson) Mahsulotdan JSON obyekt yasang: jsonb_build_object('id',id,'nom',nom), birinchi 3.
Kutilgan natija
5. (dokon, oson) Kategoriyalar ro'yxatini JSON massivga jamlang (jsonb_agg nom bo'yicha).
6. (dokon, oson) '{"a":1,"b":2}' dagi kalitlarni jsonb_object_keys bilan chiqaring.
7. (dokon, o'rta) 'atributlar' JSONB ustunli mahsulot_json jadvali yarating, 2 qator qo'shing va rangi 'qora' bo'lganlar sonini toping.
8. (dokon, o'rta) @> (contains) operatori: {"rang":"oq","ram":16} ichida {"rang":"oq"} bormi?
9. (dokon, o'rta) ? operatori: JSONB da 'ram' kaliti bormi?
10. (dokon, o'rta) jsonb_set: {"a":1} ga 'b':2 qo'shib, 'a' ni 10 ga o'zgartiring.
11. (dokon, o'rta) || operatori bilan ikki JSONB ni birlashtiring.
12. (dokon, o'rta) - operatori bilan kalitni o'chirish: {"a":1,"b":2} dan 'a' ni olib tashlang.
13. (dokon, o'rta) Massiv elementi: '[10,20,30]' dan 2-element (indeks 1) va uzunligi.
14. (dokon, o'rta) jsonb_array_elements bilan '[1,2,3]' elementlari yig'indisi.
15. (dokon, o'rta) Ichma-ich yo'l: {"manzil":{"shahar":"Toshkent"}} dan shaharni #>> bilan chiqaring.
16. (dokon, o'rta) Buyurtmalarni har bir mijoz bo'yicha JSON massivga jamlang: mijoz_id va buyurtma id lar massivi, birinchi 3 mijoz.
17. (dokon, qiyin) Mijozlar jadvalini to'liq to'liq JSON ga aylantiring: to_jsonb(m) dan 'ism' va 'shahar', birinchi 3.
18. (dokon, qiyin) jsonb_to_recordset bilan JSON massivni jadvalga aylantiring: [{"id":1,"nom":"a"},{"id":2,"nom":"b"}].
19. (dokon, qiyin) jsonb_path_query: '$.tovarlar[*].narx' bilan narxlar yig'indisi (tovarlar massivida).
20. (dokon, qiyin) Buyurtma yuki (payload): har bir buyurtma uchun elementlar JSON (mahsulot_id, miqdor) massivi; id<=3.
Kutilgan natija
21. (dokon, qiyin) GIN indeks: mahsulot_json jadvali (atr jsonb) yarating, GIN indeks qo'shing, indeks turini ko'rsating.
22. (maktab, oson) O'quvchi ma'lumotlarini JSON ga: jsonb_build_object('ism',ism,'sinf',sinf_id), birinchi 3.
Kutilgan natija
23. (maktab, oson) Sinf bo'yicha o'quvchi ismlari JSON massivi (sinf 1 uchun).
Kutilgan natija
24. (maktab, oson) '{"fan":"Matematika","ball":5}' dan ball ni butunga aylantirib chiqaring.
25. (maktab, o'rta) Baholar JSON: o'quvchi 1 ning baholari massiv sifatida (fan_id, ball obyektlar), sana tartibida.
26. (maktab, o'rta) JSON massiv ['a','b','c'] ni qatorlarga yoying (jsonb_array_elements_text) tartib raqami bilan.
27. (maktab, o'rta) jsonb_each_text bilan {"x":1,"y":2} ni (kalit, qiymat) qatorlarga aylantiring.
28. (maktab, qiyin) O'qituvchi + fanlari ierarxik JSON: har bir o'qituvchi uchun {'ism', 'fanlar':[...]} (id<=3, fanlari bor).
Kutilgan natija
29. (maktab, qiyin) jsonb_object_agg: fan nomi -> o'rtacha ball (2 xona) JSON obyekt (fan_id<=3).
30. (maktab, qiyin) jsonb_path_exists: JSON '{"baholar":[5,4,3]}' da 4 dan katta element bormi.
31. (bank, oson) Hisob JSON: jsonb_build_object('id',id,'balans',balans) birinchi 3.
Kutilgan natija
32. (bank, oson) Filiallar ro'yxati JSON massiv (nom bo'yicha).
33. (bank, o'rta) Mijoz hisoblari jamlanmasi: mijoz 1 uchun {'ism', 'hisoblar':[id lar]}.
34. (bank, o'rta) JSONB ustun: 'sozlama' jadvali (mijoz_id, qiymat jsonb) yarating, {"til":"uz","bildirishnoma":true}; til ni chiqaring.
35. (bank, o'rta) jsonb_set bilan sozlamani yangilash: til 'ru' ga o'zgartiring.
36. (bank, qiyin) Tranzaksiyalar JSON hisoboti: tur bo'yicha {tur: jami} obyekt.
37. (bank, qiyin) jsonb_pretty emas; JSON ichidagi massiv elementlari bo'yicha agregat: '[{"s":100},{"s":250}]' dagi s yig'indisi.
38. (kutubxona, oson) Kitob JSON: jsonb_build_object('nom',nom,'yil',yil) birinchi 3.
Kutilgan natija
39. (kutubxona, o'rta) Muallif bo'yicha kitoblar JSON massivi (muallif 1).
Kutilgan natija
40. (kutubxona, o'rta) Teglar massivi: '["roman","tarix"]' da 'tarix' bormi (? operatori).
41. (kutubxona, qiyin) Muallif -> kitoblar -> yil: har bir muallif uchun {'muallif', 'kitoblar': [{'nom','yil'}]}, muallif id<=2.
Kutilgan natija
{"muallif": "Abdulla Qodiriy", "kitoblar": [{"nom": "Kitob 8 sirlari", "yil": 1965}, {"nom": "Kitob 16 sirlari", "yil": 1980}, {"nom": "Kitob 24 sirlari", "yil": 1995}, {"nom": "Kitob 32 sirlari", "yil": 2010}, {"nom": "Kitob 40 sirlari", "yil": 1952}]}
{"muallif": "Cholpon", "kitoblar": [{"nom": "Kitob 1 yoli", "yil": 1961}, {"nom": "Kitob 9 yoli", "yil": 1976}, {"nom": "Kitob 17 yoli", "yil": 1991}, {"nom": "Kitob 25 yoli", "yil": 2006}, {"nom": "Kitob 33 yoli", "yil": 2021}]}