SQL window funksiyalar (OVER, PARTITION BY)
GROUP BY qatorlarni yig’ib, guruh uchun bitta natija
berardi. Ba’zan esa har qatorni saqlab, ustiga guruh bo’yicha hisob
qo’shish kerak bo’ladi — masalan “har mahsulotning o’z toifasidagi o’rni”.
Buni window funksiyalar bajaradi.
OVER — qatorni yo’qotmasdan hisoblash
Window funksiya OVER (...) bilan yoziladi. Har mahsulotga toifasidagi
o’rnini beramiz:
SELECT nom, turi, narx,
ROW_NUMBER() OVER (PARTITION BY turi ORDER BY narx DESC) AS orin
FROM mahsulotlar;
O’zingiz ishga tushirib ko’ring — so’rovni tahrirlashingiz ham mumkin:
SQL · namuna baza
Natija — barcha qator saqlanadi, ustiga orin qo’shildi:
| nom | turi | narx | orin |
|---|---|---|---|
| Guruch | don | 18000 | 1 |
| Choy | ichimlik | 15000 | 1 |
| Suv | ichimlik | 4000 | 2 |
| Banan | meva | 14000 | 1 |
| Olma | meva | 8000 | 2 |
| Non | non | 3000 | 1 |
| Sut | sut mahsuloti | 12000 | 1 |
| Qatiq | sut mahsuloti | 9000 | 2 |
PARTITION BY turi— hisobni har toifa uchun alohida yuritadi.ORDER BY narx DESC— toifa ichida narx bo’yicha tartiblaydi.ROW_NUMBER()— har qatorga tartib raqami beradi.
Amaliy mashq
Oyna funksiyalarini sinang:
ROW_NUMBER()bilan har toifada narx bo’yicha o’rin bering;PARTITION BYni olib tashlang — raqamlash qanday o’zgardi?RANK()ga almashtiring va farqni kuzating;SUM(narx) OVER (ORDER BY id)bilan o’suvchi yig’indi hisoblang;- shu natijani
GROUP BYbilan olishga urinib ko’ring.
5-qadam window funksiya va GROUP BY farqini aniq ko’rsatadi.
Qisqacha xulosa
- Window funksiya qatorlarni yig’masdan, guruh bo’yicha hisob qo’shadi.
OVER (...)— funksiyaning “oynasini” belgilaydi.PARTITION BY— oynani guruhlarga bo’ladi;ORDER BY— ichida tartiblaydi.ROW_NUMBER()tartib raqami;RANK(),SUM() OVERham bor.GROUP BYdan farqi: har qator natijada saqlanadi.
Keyingi darsda CTE (WITH) — murakkab so’rovni nomlangan
bo’laklarga bo’lib, o’qishga qulay qilishni ko’ramiz.